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

问题描述:

我不明白是什么原因使得用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();破坏参照新的窗口。

+0

我之所以没有在Chrome中出现错误,是因为我使用--allow-file-access-from-files标志运行了Chrome。如果没有这个标志,我会在执行'f1()'和'f2()'后执行'f3()'时在Chrome中出现以下错误消息:Uncaught TypeError:Object [object global]没有方法'open'。但是为什么Firefox在执行script2(函数'f()')时重新打开关闭窗口? – user2227119

+0

+1 ......“这个问题意味着什么” – Algorath