0

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

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

在 IE8 中我得到错误:

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

在 Chrome 25 中,我没有收到任何错误。

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

您能否尝试这两个脚本并帮助我理解这种奇怪行为的原因?

4

1 回答 1

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();破坏了对新窗口的引用。

于 2013-03-30T14:28:18.567 回答