2008-10-27 38 views
2

我的網頁上有一個主窗口(#1),我打開一個新的瀏覽器窗口(#2),從中打開一個新窗口(#3)。使用Javascript處理兒童和孫子窗口

現在,如果我的用戶在窗口#3之前關閉窗口#2,我有問題,窗口#3不再可以在window.opener中調用函數,因爲它已消失。

我想要做的是當窗口#2關閉時,將窗口#3.opener設置爲窗口#1。

我試圖做到這一點我窗口#2(通過使用jQuery的方式):

var children = []; 
$(window).unload(function() { 
    $.each(children, function(p, win) { 
     if (win) { 
      win.opener = window.opener; 
      } 
    }); 
}); 

當窗口#3加載我的窗口添加到陣列孩子窗口#2。

但是,當窗口#2在窗口#3之前關閉時,窗口#3的window.opener不會指向窗口#1。

如何確保在窗口#2關閉後,我的大孩子窗口(窗口#3)仍然可以調用主窗口(窗口#1)?

回答

3

在第三wndow你把:

<script type="text/javascript"> 
    var grandMother = null; 
    window.onload = function(){ 
    grandMother = window.opener.opener; 
    } 
</script> 

因此你必須把手給奶奶窗口,然後就可以直接使用它的任何東西:

if(grandMother) 
     grandMother.document.getElementById("myDiv").firstChild.nodeValue ="Greetings from your grandchild !-"; 
0

這可能是切線,但爲什麼你需要打開3個獨立的窗口?你可以使用jQuery對話框嗎?當應用程序打開我的窗戶時,我感到非常沮喪。

0

window.opener可能是隻讀的。我會設置你自己的屬性來指孫加載時的祖父母。

function onLoad() { 
    window.grandparent = window.opener.opener; 
} 
1

您應該在第三次打開時創建對主窗口的引用:

parent = window.opener.opener 

這將在第二個窗口關閉時存活。

0
var main_window = get_main_window(); 
function get_main_window(){ 
    var w = window; 
    while(w.opener !== null){ 
     w = w.opener; 
    } 
    return w; 
} 
+0

請避免使用純代碼的答案並提供代碼說明。 – 2016-11-09 03:59:04