Firefox 4 onBeforeUnload自定义消息

JoJ*_*oJo 69 javascript firefox firefox4

在Firefox 3中,我能够编写一个自定义确认弹出窗口:

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

现在在Firefox 4中,它不会显示我的自定义消息.它提供的默认消息甚至不能准确应用我的应用程序.

firefox 4确认

可以覆盖此默认消息吗?

Thi*_*ter 52

来自MDN:

请注意,在Firefox 4及更高版本中,返回的字符串不会显示给用户.见Bug 588292.

这个"Bug"实际上是一个(imho有问题的)功能..所以没有办法在Firefox 4中显示消息.如果你认为它应该被更改,请评论该bug,以便Firefox开发人员知道人们实际上想要成为能够显示自定义字符串.

  • 好吧,例如,我的webradio有一个Flash播放器,当它正在运行时,我正在显示"如果你关闭此页面,流将停止播放"消息.这与"你可能丢失数据"有很大的不同. (17认同)
  • 我的申请有很多原因可能会阻止你.也许某些东西没有保存,也许某些东西处于错误状态,也许AJAX请求还没有返回,所以我想请你等一下.我应该能够至少告诉用户他们为什么被阻止,否则他们将如何知道如何解决?我认为应该有一个明显的默认消息("您输入的数据可能无法保存"),以及明显的"自定义"消息(显然来自页面,而不是浏览器).就像广告上面说"广告"一样,用户也不会误导. (16认同)
  • 这可以用于善恶.**好**:警告某人您的网络广播将被关闭,未保存更改,...**坏**:做反向心理的病毒网站:"点击取消不安装病毒". (7认同)
  • 与我的网络应用程序相同.没有数据丢失.网络广播将停止.在进行用户测试时,我注意到很多人不了解网络直播的本质.他们不知道当浏览器关闭时,他们的网络广播就会停止.他们认为它像Youtube一样上传一次,它永远留在云中. (5认同)
  • 这绝对是一个功能。与离开已输入数据的页面相关的问题是普遍的。我不需要更激进的警告,因为 99% 的此类消息都很烦人或具有误导性。你的应用并不特别。 (2认同)

Nas*_*sif 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?";
    }
});
Run Code Online (Sandbox Code Playgroud)

在Firefox 11中测试和工作也是如此.:)

  • 在Firefox 17中不起作用.似乎已在Firefox 17中删除:[bug 391834](https://bugzilla.mozilla.org/show_bug.cgi?id=391834) (5认同)
  • @Nasif,首先是优秀的代码.但是你的window.setTimeout(function(){window.stop();},1); 单击firefox选项卡的x即关闭按钮时不起作用.而"离开窗口"的默认弹出窗口确实有效. (4认同)