過去,當直接調用window對象的close()方法,而不是對window實例調用close()時,瀏覽器會關閉最前面的窗口,不管腳本是否創建了該窗口。現在,出於安全原因,不再允許腳本關閉未打開的窗口。(Firefox46.0.1:腳本無法關閉尚未打開的窗口)
1.直接調用window對象的close()方法
window.close()
當直接調用window.close()方法時,IE會彈出提示框,詢問是否關閉此窗口。
Firefox則不會關閉頁面。
Google則會立即關閉當前頁面。
2.window實例調用close()方法
針對IE,去除提示框需要創建一個window實例,先打開該窗口,就可以直接關閉。
window.opener = null;
window.open('', '_self');
window.close();
針對FireFox,之所以window.close在firefox不能使用,是因爲firefox默認不能關閉用戶打開的網頁。
利用在當前窗口中打開一個新窗口來替換當前打開的頁面,然後關閉該窗口。其中window.open(‘about:blank’,’_self’)返回的是當前窗口的引用。
var opened=window.open('about:blank','_self');
opened.opener=null;
opened.close();
如果要關閉的頁面有父頁面,可以使用下面的方法
window.open('','_parent','');
window.close();
3.兼容寫法:
if(firefox) {
var opened=window.open('about:blank','_self');
opened.opener=null;
opened.close();
} else {
window.opener = null;
window.open('', '_self');
window.close();
}
最直接的辦法是在FireFox瀏覽器中輸入about:config,然後找到dom.allow_scripts_to_close_windows項,把false設爲true,這樣window.close()就可以使用了,FireFox默認狀態window.close是無效的。但需要客戶去設置,肯定不是開發者想要的。