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

Javascript 试图重新打开关闭的弹出窗口,javascript,popup,window.open,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,heigh

我不明白是什么原因使这两个用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()
创建新的窗口对象并将该对象的引用分配给变量
w
f2()
关闭由
f1()
创建的窗口对象),然后尝试执行函数
f3()
,关闭的弹出窗口(
w
)未打开,在Firefox 19中,我收到错误:

错误:NS\u错误\u不可用:组件返回故障代码: 0x80040111(NS\u错误\u不可用)[nsIDOMJSWindow.open]

在IE8中,我得到一个错误:

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

在Chrome 25中,我没有错误

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


请您尝试一下这两个脚本,并帮助我理解这种奇怪行为的原因好吗?

首先,我希望您不能胜任问题所暗示的工作。然后,我在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();
会破坏对新窗口的引用。

我在Chrome中没有出现错误的原因是我使用--allow file access from files标志运行Chrome。如果没有这个标志,我在
f1()
f2()之后尝试执行
f3()
时会在Chrome中收到以下错误消息
正在执行:未捕获类型错误:对象[Object global]没有方法“open”。但为什么Firefox在执行script2(函数
f()
)时会重新打开关闭的窗口?