zoukankan      html  css  js  c++  java
  • 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全局变量;
                    }

    看到上面的代码感觉如何?是的,就这么简单!

  • 相关阅读:
    穷举 百鸡百钱
    for嵌套for ★
    纸张的厚度循环
    MySQL架构由小变大的演变过程
    MySQL数据库主从复制实践
    想要写出高性能sql语句,你得记住这些……
    Mongodb常用的性能监控命令
    Mongodb的mongostat命令
    Windows下MongoDB常用命令
    Windows下Mysql常用操作命令
  • 原文地址:https://www.cnblogs.com/yitianhe/p/5629005.html
Copyright © 2011-2022 走看看