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全局變量; }
看到上面的代碼感覺如何?是的,就這么簡單!