0

JavaScript で記述されたこれら 2 つのスクリプトが異なる動作をする理由がわかりません。

スクリプト 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()のとおり、新しいウィンドウ オブジェクトを作成し、そのオブジェクトへの参照を variable に割り当て、wによってf2()作成されたウィンドウ オブジェクトを閉じますf1())、その後関数を実行しようとするとf3()、閉じたポップアップ ウィンドウ ( w) は実行されません。開くと、Firefox 19 で次のエラーが表示されます。

エラー: NS_ERROR_NOT_AVAILABLE: コンポーネントがエラー コードを返しました: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMJSWindow.open],

IE8 では次のエラーが発生します。

呼び出されたオブジェクトがクライアントから切断されました。

Chrome 25 では、エラーは発生しません。

スクリプト 2 (function f()新しいウィンドウ オブジェクトを作成し、そのオブジェクトへの参照を variable に割り当て、w作成されたウィンドウを閉じてから再度開くことを試みる) を実行すると、ブラウザーでエラーは発生しませんが、Firefox では f()、閉じたポップアップ ウィンドウが再び開きます。 IE と Chrome のポップアップ ウィンドウ ( w) は閉じたままです。

これら 2 つのスクリプトを試して、このような奇妙な動作の理由を理解するのを手伝ってくれませんか?

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 に答える