今天我們要來談?wù)撘幌玛P(guān)于JavaScript中窗體關(guān)閉的方法。說起來可能大家都會覺得很簡單,不就是window.close()嗎?但我們要注意的是,這種方法不是所有情況下都可以成功地關(guān)閉窗口,因?yàn)橛袝r候?yàn)g覽器會攔截該方法的執(zhí)行,從而導(dǎo)致窗口沒有被關(guān)閉。接下來,我將結(jié)合具體的實(shí)例來講解JavaScript中不同方式關(guān)閉窗口的優(yōu)缺點(diǎn)。
先看最常見的window.close()方法。在不涉及到關(guān)閉跨域窗口時,這種方法功能是OK的。我們在開發(fā)中經(jīng)常會用到彈出窗口、定時彈窗等,這時關(guān)閉窗口也是必不可少的。例如:當(dāng)然,有些需要跨域訪問的權(quán)限問題,就需要另外的方法了。
下面,我們來介紹一個“時間調(diào)用”方式來關(guān)閉窗口。例如我們希望在一定時間后自動關(guān)閉當(dāng)前頁,可以使用setTimeout()方法,設(shè)置延遲調(diào)用關(guān)閉方法,代碼如下:
setTimeout(function(){ window.opener=null; window.open('','_self'); window.close(); },1000)//毫秒計(jì)數(shù)需要注意的是,該方式同樣也是存在局限性的,而且還很容易被瀏覽器攔截,因此應(yīng)該盡量避免使用。 接下來,我們來介紹一種比較保險的關(guān)閉窗口方法,這種方法的原理是先使窗口獲取焦點(diǎn),在關(guān)閉窗口。代碼如下:
function closeWin(){ if (navigator.userAgent.indexOf("MSIE") >0) {// 判斷是否為ie if (navigator.userAgent.indexOf("MSIE 6.0") >0) { window.opener = null; window.close(); } else { window.open('', '_top'); window.top.close(); } } else if (navigator.userAgent.indexOf("Firefox") >0) {// 判斷是否為火狐瀏覽器 window.parent.opener = null; window.parent.open('', '_self', ''); window.parent.close(); } else if (navigator.userAgent.indexOf("Chrome") >0) {//判斷是否谷歌瀏覽器 window.opener = null; window.open('', '_self', ''); window.close(); } else {//其他瀏覽器 window.opener = null; window.open('about:blank', '_self').close(); } }運(yùn)用這種方法,我們可以輕松地關(guān)閉絕大多數(shù)瀏覽器窗口。 除此之外,我們還可以通過把需要關(guān)閉窗口的根節(jié)點(diǎn)的innerHTML清空來達(dá)到關(guān)閉窗口的效果。例如:
function closeWin(){ window.document.documentElement.innerHTML = ''; }但是需要說明的是,這種效果只對當(dāng)前窗口有效,無法涉及到其他窗口運(yùn)行。 綜上所述,我們在開發(fā)中可以采用不同的方式進(jìn)行窗口關(guān)閉操作,但需根據(jù)實(shí)際使用場景進(jìn)行選擇。