2011-03-22 37 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