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();
這樣就可以實現關閉彈出窗體的效果。
"你要對得起你所有經受過的苦。"