试图重新打开关闭的弹出窗口
问题描述:
我不明白是什么原因使得用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,我得到错误:
Error: NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMJSWindow.open],
在IE8中,我得到错误:
The object invoked has disconnected from its clients,
在Chrome中25我没有得到任何错误。脚本2的
执行(function f()
创建新窗口对象,分配参考该目的是可变w
,关闭创建的窗口,然后尝试重新打开)不会导致在浏览器中的任何错误,但在Firefox f()
品牌关闭弹出窗口重新打开,而在IE和Chrome中,弹出窗口(w
)仍然关闭。
请您试试这两个脚本,并帮助我理解这种奇怪行为的原因?
答
首先,我希望你不需要做什么问题暗示。然后,我跑在萤火控制台以下内容并得到了样品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中出现以下错误消息:Uncaught TypeError:Object [object global]没有方法'open'。但是为什么Firefox在执行script2(函数'f()')时重新打开关闭窗口? – user2227119
+1 ......“这个问题意味着什么” – Algorath