关闭浏览器之前的Javascript警告未按预期工作

时间:2018-02-15 14:50:46

标签: javascript jquery javascript-events onbeforeunload

我尝试了基于大量示例的解决方案,只有在首先点击其他内容时,该事件才有效。首先右键单击同一页面上的链接。然后,如果我单击浏览器关闭按钮,它会在按预期关闭之前提示警告。

否则,如果我首先转到页面或刷新它并单击关闭按钮,它将无法正常工作并关闭页面。 onbeforeunload函数内的代码每次都会命中,但在最后一种情况下显然没有效果。

$("button, a").bind("click", function () {
  window.onbeforeunload = null;
});

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

  // For IE and Firefox prior to version 4
  if (e) {
    e.returnValue = 'Sure?';
  }

  // For Safari
  return 'Sure?'; // the code hits each time - normally it does have no effect but if right-clicked a link on the page first it does work?
};

这看起来是一种非常奇怪的行为。任何人都知道为什么只有在页面上发生了另一个事件时才有效?

在Firefox&铬。

1 个答案:

答案 0 :(得分:1)

这是一个功能。 According to MDN

  

为了防止不需要的弹出窗口,某些浏览器不显示在beforeunload事件处理程序中创建的提示,除非该页面已与之交互;有些人根本不显示它们。

即使没有用户交互,您还需要显示onbeforeunload弹出窗口的用例是什么?例如,这些通常用于防止未提交表单上的数据丢失。如果用户想要离开页面并且没有任何理由显示弹出窗口,则不应尝试这样做。