使用onbeforeunload
確認導航離開是剛剛返回的字符串的正確方法你想要顯示的消息。 MDN has this to say。
函數應該指定一個字符串值事件對象的returnValue屬性,並返回相同的字符串
所以你onbeforeunload
功能你要的也只是行爲(如同結合它使用jQuery,特別是因爲onbeforeunload不支持多個事件偵聽器像其他事件一樣)
window.onbeforeunload = function() {
return "Are you sure?";
};
但諷刺的是,Firefox不支持這種出於安全目的。
請注意,在Firefox 4及更高版本中,返回的字符串不會顯示給用戶。見bug 588292。
編輯:我讀了更多的錯誤報告。他們網站做出這一決定的主要原因是:「1.刪除站點提供的文本,因爲這是一個安全問題(瀏覽器對話框中的不可信文本)」。我想知道他們對alert
感覺如何?
除了返回字符串以外,大多數現代瀏覽器(Chome,IE 9+或更早的版本,以及我知道的Opera)都會忽略您嘗試在onbeforeunload
函數中執行的任何操作。這是爲了防止劫持用戶瀏覽器,打開彈出窗口,通過指向另一個用戶(可能是惡意域名)覆蓋導航嘗試等。
編輯2:我顯然是不正確的。只有一些東西在onbeforeunload
中不允許,它們只是碰巧主要是您在示例代碼中嘗試過的東西類型,與事件傳播和頁面導航無關。從該FF錯誤報告的deep in the comments,用戶oyasumi發佈一個鏈接到這個jsFiddle與工作周圍顯示自定義文本到FF 4+用戶:http://jsfiddle.net/ecmanaut/hQ3AQ/因此,顯然呼籲alert()
仍然是允許的,即使在onbeforeunload
,這正是歡樂地做着什麼是「錯誤」「修復」的原始原因:在瀏覽器/應用程序/操作系統/官方對話框中顯示自定義文本。
不可能。能夠在沒有用戶輸入的情況下停止導航將會破壞瀏覽工作的方式。 – jbabey 2013-02-28 20:45:41
我有同樣的感覺。在Firefox的例子中,出於安全原因,他們故意阻止覆蓋window.location.href。參見[bugzilla中的這個錯誤](https://bugzilla.mozilla.org/show_bug.cgi?id=736694)。 – kamituel 2013-02-28 20:47:28
其實這是可能的。否則,網站會詢問您是否想要「離開並丟失更改」。 beforeunload事件存在,即使您關閉窗口而不衝浪,它也會捕獲。調用返回false的jQuery中的 – Alfabravo 2013-02-28 20:53:42