我无法理解使用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()
)仍然关闭。
请你试试这两个脚本,帮助我理解这种奇怪行为的原因吗?
答案 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();
会破坏对新窗口的引用。