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()方法是否執行"); }
};
相關文章
相關標籤/搜索