3 回答

TA貢獻1836條經驗 獲得超5個贊
在某些瀏覽器中,在此事件期間可能會忽略對 window.alert()、window.confirm() 和 window.prompt() 的調用。有關詳細信息,請參閱 HTML 規范。
https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
嘗試 console.log 并在控制臺中選中“保留日志”。你會發現這alert()
對你的情況不起作用

TA貢獻1871條經驗 獲得超8個贊
為防止詐騙,瀏覽器會謹慎處理這些消息。大多數人可以做的事情非常有限。Chrome 顯示標準化消息“離開網站?您所做的更改可能無法保存?!?nbsp;這是不可改變的afaik。為此,只需使用:
window.onbeforeunload = function () { return true; };
另一種方法是檢測鼠標何時離開窗口。這是不一樣的,但離開視口通常是在關閉選項卡之前執行的操作。您可以在鼠標離開窗口時檢測事件并觸發您喜歡的任何消息或彈出窗口。我個人覺得這很煩人。

TA貢獻1820條經驗 獲得超10個贊
您實際上正在正確檢測到選項卡關閉事件!問題出在您的觸發操作上。來自相關的 MDN 文檔:
為了防止不需要的彈出窗口,某些瀏覽器不會顯示在
beforeunload
事件處理程序中創建的提示,除非頁面已與之交互。此外,有些根本不顯示它們。
這意味著您很難在關閉瀏覽器選項卡之前顯示警告消息,就像您說的那樣。但是,您可以通過使用return
處理程序上的值來實現類似的目的。再次引用文檔:
當此事件返回(或將 returnValue 屬性設置為)null 或 undefined 以外的值時,系統將提示用戶確認頁面卸載。在舊版瀏覽器中,事件的返回值顯示在此對話框中。從 Firefox 44、Chrome 51、Opera 38 和 Safari 9.1 開始,將顯示不受網頁控制的通用字符串,而不是返回的字符串。
有關更多詳細信息,請參閱其他問題Warn user before leaving web page with unsaved changes。
添加回答
舉報