一、從JS關閉當前標籤頁的實現方法談起
要實現關閉當前標籤頁的功能,我們需要使用 window.close() 方法。這個方法可以直接關閉當前的標籤頁。在一些老版本的瀏覽器中,由於安全限制,這個方法並不是完全管用。比如在 Edge 中就無法使用該方法關閉標籤頁。
由於效果不穩定,因此我們需要檢測當前的瀏覽器是否支持該功能,以便在其不支持時,能夠選擇其他的關閉方式。一個比較通用的解決方案是,當 window.close() 方法無法使用時,將當前標籤頁的地址修改為一個不真實存在的地址,從而讓當前標籤頁顯示出「無法訪問該網頁」的提示,以達到關閉標籤頁的效果。
function closeWindow() { var userAgent = navigator.userAgent.toLowerCase(); var isEdge = userAgent.indexOf('edge') !== -1; if (window.close && !isEdge) { window.close(); } else { window.location.href = 'about:blank'; window.opener = null; window.close(); } }
二、手機瀏覽器中的JS關閉當前標籤頁
在手機端,關閉標籤頁的效果也是比較常見的需求。然而,與 PC 端不同的是,手機端的瀏覽器往往並不支持 window.close() 方法。在這種情況下,我們可以嘗試使用一些其他的方法來關閉當前標籤頁。
一種比較通用的解決方案是,向當前標籤頁發送一條消息,在消息處理函數中調用 window.close() 方法來關閉該標籤頁。代碼如下:
window.addEventListener("message", function (e) { if (e.data === "close" && e.origin === window.location.origin) { window.close(); } });
在另一個頁面中,我們可以使用 JavaScript 來向當前標籤頁發送一條消息,以觸發上述的關閉方法:
window.opener.postMessage("close", window.location.origin);
三、如何在a標籤的點擊事件中實現JS關閉頁面
我們也可以通過點擊 a 標籤的方式來觸發 JavaScript 關閉當前標籤頁的方法。在這種情況下,我們需要使用 JavaScript 來攔截 a 標籤的默認行為,並在點擊事件處理函數中來實現標籤頁的關閉:
var links = document.getElementsByTagName('a'); for (var i = 0; i < links.length; i++) { var link = links[i]; link.addEventListener('click', function (event) { event.preventDefault(); var target = event.target || event.srcElement; var href = target.href || 'about:blank'; window.location.href = href; }); }
在上述代碼中,我們通過 event.preventDefault() 的方法來阻止默認行為的觸發。並使用 window.location.href 的方法來實現標籤頁的關閉。
四、JS關閉其他標籤頁的實現方法
有時候,我們需要關閉打開的所有標籤頁中,除了當前標籤頁之外的所有標籤頁。這時,我們可以使用 JavaScript 中的 window.open() 方法來打開新的標籤頁,並為每個標籤頁設置一個唯一的標識符。然後,我們可以通過 window.close() 方法來逐個關閉所有的標籤頁。
var windows = []; function openWindow(url) { var win = window.open(url); var id = setInterval(function () { if (win.closed) { clearInterval(id); windows.splice(windows.indexOf(win), 1); } }, 1000); windows.push(win); } function closeOtherWindows() { windows.forEach(function (win) { if (win !== window) { win.close(); } }); }
在上述代碼中,我們為每個標籤頁設置了一個唯一的 id,並使用 setInterval() 方法來定時檢測標籤頁是否已經關閉。在 window.close() 方法被調用時,該標籤頁將從 window 數組中移除。
五、使用JS關閉標籤頁的注意事項
由於瀏覽器安全限制的原因,我們在使用 window.close() 方法時需要遵循一些注意事項:
1. window.close() 方法只能關閉被 JavaScript 打開的標籤頁或者窗口。如果標籤頁是通過用戶手動打開的,那麼該標籤頁將不能被關閉。
2. window.close() 方法只能關閉由當前腳本打開的標籤頁或者窗口。一旦腳本執行了 window.close() 方法,該標籤頁就立即關閉了。如果腳本在執行期間跳轉到了其他頁面,那麼 window.close() 方法將無效。
3. window.close() 方法會被彈出窗口的 blockers 攔截。因此,如果要打開一個新的標籤頁,我們最好通過 a 標籤或者 window.open() 方法來實現。
原創文章,作者:VCKD,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/147507.html