一個頁面加載多個 TerraExplorer3DWindow 和 SGWorld 等只有第一個能用(即便用 iframe 也是同樣)數組
因此我決定打開兩個新頁面實現多窗口對比,而後我在《主頁面》使用 window.open 打開了兩個《新頁面》,但這兩個新頁面使用 SGWorld 時竟然在主頁面(使用 window.open 的頁面)產生了效果,感受和之前的一個頁面加載多個 TerraExplorer3DWindow 和 SGWorld 效果同樣了!!!函數
而後通過測試發現關閉主頁面新頁面就正常加載三維地圖了。能夠看出使用 window.open 時主頁面和新頁面是有關聯的,我一開始試了不少方法都斷不開這個關聯,最後決定打開新頁面時多打開一個主頁面,而後關掉主頁面這種笨方法。測試
當使用 window.close 當前關閉窗口,竟然沒有關上,我一搜發現了關閉前有這一行代碼window.opener=null
ui
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()方法是否執行"); } };