簡體   English   中英

無法讓 Chrome、Edge 和 Firefox 安靜地執行 beforeunload 事件

[英]Can't make Chrome, Edge & Firefox to quietly execute beforeunload event

當用戶單擊當前頁面上的其他鏈接引用並離開當前頁面時,我想做一些事情。 我不想要任何確認提示 - 只是靜默執行我的 function。根據規范和谷歌上的大量回復,為了沒有這個確認提示,我根本不會在我的事件中有事件 preventDefault() 或 event.returnValue聽眾:

window.addEventListener("beforeunload", function(event) {
    unloading_page_func();
}, false);

這樣的代碼在 Chrome 和 Edge 中運行良好,但 Mozilla 什么都不做——不確定它是否沒有添加事件監聽器或沒有觸發 beforeunload 事件:console.log 和 alert 在 beforeunload 期間都不起作用:(

我嘗試了不同的組合:添加了 event.returnValue = '':

window.addEventListener("beforeunload", function(event) {
    unloading_page_func();
    event.returnValue = '';
}, false);
  • Chrome & Edge 生成確認提示,Firefox 仍然沒有任何反應。

添加了 event.returnValue = null:

window.addEventListener("beforeunload", function(event) {
    unloading_page_func();
    event.returnValue = null;
}, false); 
  • 所有 3 種瀏覽器,Chrome & Edge & Firefox,都會生成確認提示。

添加了 event.preventDefault():

window.addEventListener("beforeunload", function(event) {
    unloading_page_func();
    event.preventDefault();
}, false); 
  • Chrome 和 Edge 運行安靜,但 Firefox 會生成確認提示。

嘗試了兩者的不同組合,event.preventDefault() 和 event.returnValue - 始終是上面列出的結果之一。 關於如何讓我的 Chrome(版本 92.0.4515.131)、Edge(版本 92.0.902.67)和 Firefox(版本 90.0.2)安靜地執行我的 function 而不生成任何確認提示的任何建議?

正如“Bravo”評論的那樣,我遇到的行為可能與 unloading_page_func() 的內容有關 我想在用戶切換到另一個頁面時響鈴 - 這個 function 將這個事件監聽器刪除到“beforeunload”,清除 function 的間隔更新頁面,並向完成某些清理的服務器發送 GET 請求:

function unloading_page_func()
{
    try {
        xmlHttp = new XMLHttpRequest();
    }
    catch (e) {
        try {
            xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch (e) {
            try {
                xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch (e) {
                alert("This browser does not support AJAX!");
            }
        }
    }

    window.removeEventListener("beforeunload", unloading_page_func, false);

    clearInterval(update_display_interval_id);

    xmlHttp.open('GET', '/unload_page', true);
    xmlHttp.send();
};

按照 Bravo 的建議使用“信標”解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM