Mozilla Firefox不使用window.onbeforeunload

时间:2013-12-25 13:30:53

标签: javascript jquery firefox javascript-events onbeforeunload

我正在使用window.onbeforeunload在windows关闭时向用户显示一条消息,该功能适用​​于chrome和IE但它不适用于Firefox,我使用的是firefox版本{{1}我已经尝试了很多,但没有任何意思,有人说它是firefox中的一个bug,就像在这个post和另一个提出了一些解决方案,就像在这个post我尝试了所有可用的解决方案,使用javascript和jquery但是它不起作用,现在我显示一个确认对话框,但它后面出现浏览器默认对话框,我对此不满意,我还试图阻止使用26.0显示浏览器默认对话框但是没有意思!!如果有任何解决方案可以解决这个问题,那将是很好的,这就是我使用preventDefault()的方式:

window.onbeforeunload

注意:<script> window.onbeforeunload = confirmWinClose(); function confirmWinClose() { var myVar ='${isFireFox}'; if(myVar=='true'){ return confirm(confirmExamClose); }else{ return confirmExamClose; } } <script> 是一个jsp变量,我曾经使用isFireFox知道浏览器的类型。标题和User-Agent是我向用户显示的消息。

4 个答案:

答案 0 :(得分:13)

这是适用于Firefox和Chrome的解决方案。我还没有在Safari和Opera中测试过。

var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable

myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
    var confirmationMessage = 'Are you sure to leave the page?';
    (e || window.event).returnValue = confirmationMessage;
    return confirmationMessage;
});

答案 1 :(得分:4)

我在2天内找到了一个Firefox onbeforeunload解决方案但没有运气,所以我在这方面努力工作,并用一点技巧做到了。

在我的技巧中,用户需要至少点击一次浏览器窗口。 如果用户点击窗口然后点击后退按钮,刷新页面或尝试退出页面,onbeforeunload事件将会触发,

&#13;
&#13;
$(window).on('beforeunload', function () {
    return "Are you sure you want to exit this page?";
});
$(window).one('click',function(){
    alert('hi');
    $('.javavoid').trigger('click');
});
&#13;
.hide{display:none;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
    <a class="hide javavoid" href="javascript:void(0)">asdf</a>
    <p>Welcome, click anywhere then click on back button or refresh page</p>
</body>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

使用MDN中给出的代码在firefox / chrome / IE11中为我工作(暂时没有尝试其他浏览器)。

window.onbeforeunload = function (e) {
  var e = e || window.event;

  // For IE and Firefox
  if (e) {
    e.returnValue = 'Any string';
  }

  // For Safari
  return 'Any string';
};

这是doc:Mdn window.onbeforeunload doc

答案 3 :(得分:-1)

为什么要在这里进行浏览器嗅探?代码的“Firefox”分支返回window.confirm的返回值,这是一个布尔值。但是布尔值不可调用,因此将其分配给window.onbeforeunload与分配null相同。

您可能想要做的是删除浏览器嗅探并执行:

window.onbeforeunload = confirmExamClose;