我的网页上有一个主窗口(#1),我打开一个新的浏览器窗口(#2),从中打开一个新窗口(#3)。
现在,如果我的用户在窗口#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之前关闭时,windows#3的window.opener仍未指向窗口#1。
如何确保我的孙子窗口(窗口#3)在窗口#2关闭后仍能调用主窗口(窗口#1)?
答案 0 :(得分:3)
在第三个窗口中输入:
<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 !-";
答案 1 :(得分:1)
第三次打开时,您应该创建对主窗口的引用:
parent = window.opener.opener
这将在第二个窗口关闭后继续存在。
答案 2 :(得分:0)
这可能是切向的,但为什么你需要打开3个独立的窗户?你可以使用jQuery对话框吗?当应用程序打开我的窗口时,我感到非常沮丧。
答案 3 :(得分:0)
window.opener
可能是只读的。我设置了你自己的财产,以便在装载孙子时引用祖父母。
function onLoad() {
window.grandparent = window.opener.opener;
}
答案 4 :(得分:0)
var main_window = get_main_window();
function get_main_window(){
var w = window;
while(w.opener !== null){
w = w.opener;
}
return w;
}