[英]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);
添加了 event.returnValue = null:
window.addEventListener("beforeunload", function(event) {
unloading_page_func();
event.returnValue = null;
}, false);
添加了 event.preventDefault():
window.addEventListener("beforeunload", function(event) {
unloading_page_func();
event.preventDefault();
}, false);
嘗試了兩者的不同組合,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.