SkylineGlobe的PopupMessage里面嵌入的網頁如何與主頁面交互通訊


1.主頁面調用PopupMessage,如果需要傳值,就是普通的頁面間的傳值就可以實現了。

a.html頁面調用PopupMessage創建方法,url傳入b.html?x=111&y=22;  

然后在b.html接收解析就可以了;

// GetParamValue
function GetParamValue(findParam, defaultValue) 
{
    var arr = document.location.href.split("?");
    if (arr.length <= 1) return defaultValue;
    arr = arr[1].split("&");
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].indexOf(findParam) == 0 && arr[i].indexOf("=") == findParam.length) {
            arr = arr[i].split("=");
            return arr[1];
        }
    }
    return defaultValue;
} 

 

2.PopupMessage里面嵌入的子頁面如何調用主頁面上的變量和函數方法呢?

或者說如何實現主頁面調用PopupMessage中嵌入的子頁面中的變量或者函數方法呢?

 

一些剛接觸SkylineGlobe的開發者可能會比較困惑,但早在十幾年前,Skyline就已經提供了終極解決辦法。

只不過沒有把這個接口升級成最新版本的,使用這個接口的時候,需要定義一個老版本的TE對象。

如果你的Skyline起點就是6之后的版本,可能會錯過這個IScriptEngine接口。

 

具體實現示例代碼如下:

A頁面是主頁面,B頁面是嵌入PopupMessage中的子頁面,

A頁面上的代碼如下:

     var ttt = "ttt11";
        function OnLoadFinished() {
            //var TE = _$SGCreateTEObj();            
            var TE = TEX1.CreateInstance("TerraExplorerX.TerraExplorer");
            var IScriptEngine = TE.interface("IScriptEngine5");
            try { IScriptEngine.UnregisterName("ContentCreatorWindow"); } catch (e) {  }
            try { IScriptEngine.RegisterGlobalName("ContentCreatorWindow", window); } catch (e) {  }
        }
/*利用IScriptEngine接口的GetGlobalName方法,獲取B頁面的Window對象*/
        function test4() {
            //var TE = _$SGCreateTEObj();
            var TE = TEX1.CreateInstance("TerraExplorerX.TerraExplorer");
            var IScriptEngine = TE.interface("IScriptEngine5");
            var test = IScriptEngine.GetGlobalName("++ToolsEditorWindow");
            alert(test.aaa);//得到html1頁面中的aaa全局變量;
        }

        /*定義Skyline5版本的TE Object*/
        function $(id) {
            return window.document.getElementById(id);
        }
        function _$SGCreateTEObj() {
            var obj = $("TE");
            if (obj == null) {
                obj = document.createElement('object');
                document.body.appendChild(obj);
                obj.name = "TE";
                obj.id = "TE";
                obj.classid = "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";
            }
            return obj;
        }

 

B頁面上的代碼如下:

var aaa = "aaa";
        function Init()
        {
            var TE = _$SGCreateTEObj();
            var IScriptEngine = TE.interface("IScriptEngine5");
            try { IScriptEngine.UnregisterName("ToolsEditorWindow"); } catch (e) {  }
            try { IScriptEngine.RegisterGlobalName("ToolsEditorWindow", window); } catch (e) { alert("error RegisterGlobalName: ToolsEditorWindow") }
        }
/*利用IScriptEngine接口的GetGlobalName方法,獲取A頁面的Window對象*/
                function TestSE()
                {
                    var TE = _$SGCreateTEObj();
                    var IScriptEngine = TE.interface("IScriptEngine5");
                    var test = IScriptEngine.GetGlobalName("++ContentCreatorWindow");
                    alert(test.ttt);//得到A頁面中的ttt全局變量;
                }

看到上面的代碼感覺如何?是的,就這么簡單!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM