2010-09-09 195 views
9

我有一個彈出窗口,並在該頁面中我有以下代碼在正文中。html javascript打開新窗口,並關閉當前窗口

<a href="http://www.somesite.com" target="_blank" onClick="javascript:window.close()"><img src="...something"/></a> 

的目的是當用戶點擊了圖片的鏈接有這個彈出窗口關閉,並打開一個新的頁面,被定向到http://www.somesite.com

它適用於IE和Chrome,但不適用於Firefox。彈出窗口關閉,但沒有打開新窗口。

任何想法?

+1

這已經被問過:http://stackoverflow.com/questions/760422/ – user123444555621 2010-09-09 23:13:48

+1

@ Pumbaa80 - 這不是OP要求的。這個問題是關於爲什麼一個窗口不會關閉。 OP的窗口將關閉,但不會打開一個新窗口。 – Ender 2010-09-09 23:25:57

+0

對。對不起,我沒有仔細閱讀。 – user123444555621 2010-09-10 06:55:48

回答

12

是的,我可以重複這個 - 有趣。 setTimeout作品圍繞它:

onClick="javascript: setTimeout(window.close, 10);" 

我只能猜測,一旦窗口關閉(超鏈接之前,這恰好是遵循)的Firefox將停止處理該頁面。

編輯:最好使它延遲10ms - 1ms Chrome不關閉窗口。

+0

它的工作原理,謝謝,我想你是對的,它可能只是停止執行其他操作,一旦它關閉。有意義〜 – Eatdoku 2010-09-09 23:23:30

2

當您通過javascript向某個元素的click事件添加某些功能時,該功能會在默認的單擊事件(在本例中,打開一個新頁面)之前執行,以允許攔截並覆蓋默認事件。只有當事件返回布爾值true時,纔會執行默認行爲。

在這種情況下,附加功能是關閉窗口,我的猜測是Firefox選擇將此解釋爲「我們都在這裏完成」,所以click事件從不返回true,因此新頁面永遠不會被打開。

Evgeny建議使用短暫超時將允許click事件在窗口關閉前返回true,從而允許打開新窗口。

2

這個問題實際上是解決了開瓶器,但它沒有幫助我的問題(不希望:在Firefox下的新窗口保持與當前彈出相同的大小)。 所以我覺得以下解決方案:

function whenClicked() 
{ 
    window.close(); 
    opener.location.href = "http://www.somesite.com"; 

} 

或本如果PPAGE應在新標籤中打開:

function whenClicked() 
{ 
    window.close(); 
    opener.open(http://www.somesite.com, '_blank'); 
} 
+0

簡單而優雅的解決方案,不會影響暫停。延遲時間很難猜測以適應所有環境。 – AbelSurace 2017-09-05 16:49:13