Skyline(6.x)-Web二次开发-1多窗口对比

一个页面加载多个 TerraExplorer3DWindow 和 SGWorld 等只有第一个能用(即便用 iframe 也是同样)数组

因此我决定打开两个新页面实现多窗口对比,而后我在《主页面》使用 window.open 打开了两个《新页面》,但这两个新页面使用 SGWorld 时竟然在主页面(使用 window.open 的页面)产生了效果,感受和之前的一个页面加载多个 TerraExplorer3DWindow 和 SGWorld 效果同样了!!!函数

而后通过测试发现关闭主页面新页面就正常加载三维地图了。能够看出使用 window.open 时主页面和新页面是有关联的,我一开始试了不少方法都断不开这个关联,最后决定打开新页面时多打开一个主页面,而后关掉主页面这种笨方法。测试

当使用 window.close 当前关闭窗口,竟然没有关上,我一搜发现了关闭前有这一行代码window.opener=nullui

opener 属性是一个可读可写的属性,可返回对建立该窗口的 Window 对象的引用。
opener 属性很是有用,建立的窗口能够引用建立它的窗口所定义的属性和函数。code

断开主页面和新页面关联的方法找到了!!!对象

总结:
使用 window.open 打开两个窗口,而后设置 window.opener 为 null,这样就能够在不一样窗口中打开三维场景了。iframe

修正:
今天又测试一下设置 window.opener 为 null 很差使,仍是使用将主页面关闭这种方法吧 =_=it

//遍历工程树,将全部的layer图层、图层名都存放在数组中
var players=new Array();
var playersName=new Array();
function BuildTreeRecursive(current) {
    try{
        while (current > 0) {
            itemName = SGWorld.ProjectTree.GetItemName(current);
            if (itemName != "地形修改" && itemName != "位置" && itemName != "PresentationRoute") {
                if (SGWorld.ProjectTree.IsGroup(current)) {
                    if (SGWorld.ProjectTree.IsLayer(current)) {
                        var name = SGWorld.ProjectTree.GetItemName(current);
                        var layer = SGWorld.ProjectTree.GetLayer(current);
                        playersName[playersName.length] = name;
                        players[players.length] = layer;
                    }
                    else {
                        var childItem = SGWorld.ProjectTree.GetNextItem(current, 11);//CHILD – 11,The first child item of ItemID.
                        BuildTreeRecursive(childItem);
                    }
                }        
            }
            current = SGWorld.ProjectTree.GetNextItem(current, 13);
        }
    }
    catch (e) { alert(e)}
}

//下面是根据工程树中layer图层的名字获取layer
function GetLayerByLayerGroupName(layerGroupName) {
    if (playersName.length>0) {
        for (i = 0; i < playersName.length; i++) {
            if (playersName[i] == layerGroupName)
                return players[i];
        }
    }
    else { alert("图层名数组为空,请检查TR.BuildTreeRecursive()方法是否执行"); }
};
相关文章
相关标签/搜索