试图重新打开关闭的弹出窗口

时间:2013-03-30 13:39:27

标签: javascript popup window.open

我无法理解使用javascript编写的这两个脚本的行为方式不同的原因是什么。

脚本1

var w;
function f1() {
    w = window.open("pg1.html","wind","left=0,top=0,width=480,height=480");
}
function f2() {
    w.close();
}
function f3() {
    w.open("pg1.html","wind","left=0,top=0,width=480,height=480");
}

脚本2

function f() {
    var w = window.open("pg1.html","wind","left=0,top=0,width=480,height=480");
    w.close();
    w.open("pg1.html","wind","left=0,top=0,width=480,height=480");
}

对于脚本1,如果我执行function f1(),那么f2()(如您所见f1()创建新窗口对象并将对该对象的引用分配给变量{{1} },w关闭由f2()创建的窗口对象,然后尝试执行函数f1(),关闭的弹出窗口(f3())无法打开,在Firefox 19中得到错误:

  

错误:NS_ERROR_NOT_AVAILABLE:组件返回失败代码:   0x80040111(NS_ERROR_NOT_AVAILABLE)[nsIDOMJSWindow.open],

在IE8中我收到错误:

  

调用的对象已与其客户端断开连接,

在Chrome 25中,我没有错误。

执行脚本2(w创建新的窗口对象,将对象的引用分配给变量function f(),关闭创建的窗口,然后尝试重新打开它)不会导致任何错误浏览器,但在Firefox w中重新打开关闭的弹出窗口,而在IE和Chrome中,弹出窗口(f())仍然关闭。

请你试试这两个脚本,帮助我理解这种奇怪行为的原因吗?

1 个答案:

答案 0 :(得分:1)

首先,我希望你不要做这个问题所暗示的事情。然后,我在firebug控制台中运行以下内容,并为示例2和3获得了不同的引用:

console.log('sample 1', w); // undefined
f1();
console.log('sample 2', w); // Window about:blank
f2();
console.log('sample 3', w); // Window

看起来w.close();会破坏对新窗口的引用。