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全局变量; }
看到上面的代码感觉如何?是的,就这么简单!