2013-03-30 88 views
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()創建新的窗口對象並分配參考該對象爲變量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)仍然關閉。

請您試試這兩個腳本,並幫助我理解這種奇怪行爲的原因?

回答

1

首先,我希望你不需要做什麼問題暗示。然後,我跑在螢火控制檯以下內容並得到了樣品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

相關問題