javascript的window.close()在chrome和firefox下失效的解決方法


JavaScript原生提供了一個window.close()方法,一看就知道是用來關閉瀏覽器窗口的方法。

W3CSchool對該方法的解釋如下:

1.執行close()方法將關閉有window指定的頂層瀏覽器窗口。

2.某個窗口可以通過調用self.close()方法或只調用close()方法來關閉其自身。

3.只有通過JavaScript代碼打開的窗口才能夠由JavaScript代碼關閉,這是為了阻止了惡意的腳本終止用戶的瀏覽器。

在IE瀏覽器中,window.close()能生效,但是在生效的時候,會彈出包含警告信息的提示框,詢問你是否關閉該窗口。

但是在Chrome瀏覽器或Firefox瀏覽器下則這個方法完全不會生效,如果你打了斷點進行調試,就會發現這個方法是能運行通過的,也會照常執行,不會報錯,只是沒有執行的效果。

針對chrome瀏覽器,可以將代碼做以下修改。

window.open('', '_self', '');
window.close();

先通過window.open()在本窗口打開一個頁面,然后再通過window.close()方法關閉。

這應驗了這句話:只有通過JavaScript代碼打開的窗口才能夠由JavaScript代碼關閉。

這段代碼對IE瀏覽器和Chrome瀏覽器都是有效的,但是在Firefox瀏覽器下面無效。需要對Firefox瀏覽器進行如下操作:

1.在Firefox地址欄里輸入about:config。

2.在配置列表中找到dom.allow_scripts_to_close_windows。

3.點右鍵的選切換把上面的false修改為true即可(默認是false,目的是為了防止腳本亂關窗口)。 

FireFox瀏覽器中做了如此設置以后,就可以直接使用window.close()關閉窗口。

當然了,為了三個瀏覽器的兼容性,還是寫上面的兼容代碼比較好。

事實上,現在各種框架早就摒棄了window.open這種方式,或做好了兼容性處理。

為什么今天記錄這個問題,是因為我最近在維護一個有13年歷史的老項目的代碼,不僅維護還要往里面加新功能,好慘一開發。

-------------------------------------20200220更新---------------------------------------

今天再次嘗試這一方法,發現在新版的谷歌下這個方法已經不行了,需要找到新的解決方案。

通過警告信息【Scripts may close only the windows that were opened by it.】可以得出一點,就是要關閉彈出的窗體,必須要是打開彈出窗體的窗體,因此我們可以彈出窗體的時候給父窗體生成變量,彈出的子窗體去使用父窗體的這個變量去關閉自己即可。

父窗體的代碼:

yanggbDialog = window.open();

子窗體的代碼(彈出窗體):

window.opener.yanggbDialog.close();

這樣就可以實現關閉彈出窗體的效果。

 

"你要對得起你所有經受過的苦。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM