2009-02-09 65 views
5

這是一個後續行動,我的最後一個問題Open a window if the window does not already exist 從本質上講,我現在保持已被打開的頁面中的所有窗口引用的列表,並只允許它們被打開,如果他們不已經打開。然後出現一個潛在的問題 - 用戶當然可能關閉原始窗口並再次打開,從而失去窗口引用列表。如何在另一個窗口中檢查打開的URL?

是否可以循環瀏覽器中打開的窗口,檢查特定的URL?

編輯: 在這裏(和另一個問題)有很多有用的評論之後,這裏是應用程序啓動器的最終代碼。本質上,它試圖用合適的名稱來獲取打開窗口的位置。如果這導致例外(由於隱私問題),則判定應用程序已被加載。如果它是「about:blank」,那麼它是一個新窗口。這適用於Firefox,IE7和Google Chrome。它感覺髒...

var g_urlarray = []; 

Array.prototype.has = function(value) { 
    var i; 
    for (var i in this) { 
     if (i === value) { 
      return true; 
     } 
    } 
    return false; 
}; 


function launchApplication(l_url, l_windowName) 
{ 
    var l_width = screen.availWidth; 
    var l_height = screen.availHeight; 
    var winRef; 

    var l_params = 'status=1' + 
     ',resizable=1' + 
     ',scrollbars=1' + 
     ',width=' + l_width + 
     ',height=' + l_height + 
     ',left=0' + 
     ',top=0'; 
    if (g_urlarray.has(l_url)) { 
     winRef = g_urlarray[l_url]; 
    } 
    if (winRef == null || winRef.closed) { 
     winRef = window.open('', l_windowName, l_params); 
     var l_openNew = 0; 
     try { 
      if (winRef.location == 'about:blank') { 
       l_openNew = 1; 
      } 
     } 
     catch (e) { 
      l_openNew = 0; 
     } 
     if (l_openNew === 1) 
     { 
      winRef.location = l_url; 
      winRef.moveTo(0,0); 
      winRef.resizeTo(l_width, l_height); 
     } 
     g_urlarray[l_url] = winRef; 
    } 
} 

回答

0

@annakata(即使你儲存它們,你將無權再關閉它們)

事實並非如此。如果您有窗口的名稱,即使關閉並重新打開了開啓器,也可以使用window.open重新建立窗口的鏈接。例如:

<script> 
function winOpen(url){ 
    return window.open(url,getWinName(url)); 
} 
function winClose(url){ 
    var win = window.open("",getWinName(url)); 
    win.close(); 
} 
function getWinName(url){ 
    return "win" + url.replace(/[^A-Za-z0-9\-\_]*/g,""); 
} 
</script> 
<a href="#" onclick="winOpen('http://google.com');return false;">Click me first</a>, close and open this window, then 
<a href="#" onclick="winClose('http://google.com');return false;">click me to close the other window</a> 
4

不,這將是一個安全/隱私問題。


因爲別人都帶來了所有權/ Cookie狀態存儲:這只是如果你也是其中推開窗,即在用戶關閉窗口向下並重新打開,然後這些引用的情況相同的文檔作品確實已經丟失(即使您存儲它們,您也無權再關閉它們)

+0

您的評論居然把我的路徑解決方案上 - 如果想獲得該窗口的位置拋出一個異常,那麼它必須已經裝載(因爲約:空白不拋出異常)。非常感謝。 – 2009-02-10 10:04:36

+0

這是一個非常好的方式來通過它 – annakata 2009-02-10 10:12:48

2

在JavaScript中,您只能獲得對當前窗口的引用,以及任何用window.open打開的窗口。

你可以檢查winRef.closed,看看用戶關閉窗口,雖然。不過,我不確定這是否適用於所有瀏覽器。

2

如果您給每個窗口一個唯一的窗口名稱(window.open的第二個參數),再次調用window.open以相同的窗口名稱將打開窗口,如果它關閉,或返回對現有窗口的引用而無需打開新窗口。

0

你實際上可以用cookies做到這一點,但是......如果你問我,你就不會這樣做。

0

設置一個數組,當你打開他們的窗口引用增加它...

var wins = new Array(); 

function openWindow(url) { 
    wins.push(window.open(url)); 
} 

然後,當你想檢查窗口的狀態,您可以通過他們循環就是這樣,並刪除未打開的窗戶......

function updateWindowArray() { 
    for(var i = 0, l = wins.length; i < l; i++) { 
    if(wins[i] == null || wins[i].closed) 
     arrayRemove(wins, i, i + 1); 
    } 
} 

function arrayRemove(array, from, to) { 
    var rest = array.slice((to || from) + 1 || array.length); 
    array.length = from < 0 ? array.length + from : from; 
    return array.push.apply(array, rest); 
} 

最好的問候......

相關問題