2011-03-22 39 views
68

在Firefox ,我可以寫一個自定義的確認彈出有:火狐4 onBeforeUnload自定義消息

window.onbeforeunload = function() { 
    if (someCondition) { 
     return 'Your stream will be turned off'; 
    } 
} 

現在在Firefox ,它不顯示我的自定義消息。它提供的默認消息對於我的應用程序所做的甚至不準確。

firefox 4 confirm

可以這樣默認的消息被重寫?

+0

可能重複的[crossbrowser onbeforeunload?](http://stackoverflow.com/questions/7389554/crossbrowser-onbeforeunload) – Aelios 2014-05-13 08:22:03

回答

52

MDN

注意,在Firefox 4及更高版本返回的字符串不會顯示給用戶。請參閱錯誤588292

這個「錯誤」,實際上是(恕我直言可疑的)功能..所以沒有辦法,如果你認爲它應該改變,對錯誤意見,因此Firefox開發會知道顯示在Firefox 4的消息人們實際上希望能夠顯示自定義字符串。

+7

這可以用於善與惡。 ** GOOD **:警告某人您的網絡廣播將被關閉,未保存的更改,** ** BAD **:反轉心理的病毒網站:「單擊取消不安裝病毒」。 – JoJo 2011-03-22 23:05:18

+1

這絕對是一個功能。與留下輸入數據的頁面相關的問題是普遍的。我不需要更積極的警告,因爲99%的此類信息令人討厭或誤導。你的應用並不特殊。 – 2011-03-23 02:10:31

+17

那麼,例如,我的webradio有一個flash播放器,當它運行時,我顯示「如果關閉此頁面,流將停止播放」消息。這與「您可能會丟失數據」完全不同。 – ThiefMaster 2011-03-23 07:08:00

1

嘗試用一個確認消息實現它,

window.onbeforeunload=function(){ 
    return confirm("Are you sure??"); 
} 
當然

當用戶確認,然後顯示在FF4消息, 所以你也許更好的顯示這個每一次登錄時/訪問網站。 一個cookie應該做的伎倆。

+1

即使用戶對「您確定嗎?」拒絕嗎?對話框,它不會阻止顯示FF4消息,或者頁面試圖卸載。 – pkaeding 2011-05-15 00:41:38

+0

是的,但是這可以讓你給用戶一個消息,至少在這個Bug被修復之前,我建議提醒一下,但是看起來卸載並不顯示任何確認問題 – Jguru 2011-05-16 07:24:56

+1

根據HTML5規範呼叫提示,提醒,確認等可能被忽略。就我而言,確認無效。 – IntelliData 2015-09-10 16:38:15

3

我的解決方法是在onbeforeunload來顯示警報:

window.onbeforeunload=function() { 
    if (/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) { 
     alert("Blah blah. You have to confirm you are leaving this page in the next dialogue."); 
    } 
    return "Blah blah."; 
} 

(它顯示在Firefox兩次對話,其他地方的一個對話。)

+0

這將在關閉標籤頁/瀏覽器時顯示兩個對話框,而不是? – ThdK 2012-08-27 13:52:43

+0

@ ThdK:是的,它顯示了兩個對話框,我在帖子中添加了一個註釋。 – xmedeko 2012-08-28 08:26:23

+0

如果你刪除線'返回'Blah等等。「; '它只顯示第一個對話 – gomes 2015-05-20 12:15:31

32

除上述回答,我提高了解決方法。

我在這裏使用了jquery。你也可以使用默認的javascript功能。

$(window).bind('beforeunload', function() { 
    if(/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) { 
     if(confirm("Are you Sure do you want to leave?")) { 
      history.go(); 
     } else { 
      window.setTimeout(function() { 
       window.stop(); 
      }, 1); 
     } 
    } else { 
     return "Are you Sure do you want to leave?"; 
    } 
}); 

測試並在firefox 11中工作。 :)

+0

好的解決方案.. – 2012-08-14 13:29:17

+4

@Nasif,首先是優秀的代碼。但你的 window.setTimeout(function(){window.stop();},1);當你點擊Firefox的x關閉按鈕時, 不起作用。 而「離開窗口」的默認彈出確實工作。 – user367134 2012-09-06 13:39:35

+0

是的上面的代碼是爲頁面離開,而不是窗口關閉謝謝。 – Nasif 2012-12-31 08:24:18