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

Javascript warning before closing browser not working as expected

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

否则,如果我先转到该页面或刷新它并单击关闭按钮,它不起作用并且页面关闭。 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 中试过 & Chrome。

这是一项功能。 According to MDN:

To combat unwanted pop-ups, some browsers don't display prompts created in beforeunload event handlers unless the page has been interacted with; some don't display them at all.

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