onbeforeunload完全无法工作

3

我有这段代码:

(function() {
      window.onbeforeunload = function () {
          alert("hi")
          console.log("unloading");
      };
})();

我也有这份代码:
window.addEventListener("beforeunload", function() {
   alert("hi")
   console.log("unloading")
});

这些方法似乎都不起作用。我只想在用户尝试离开页面时记录日志,但是这并没有发生(最新的Chrome、Firefox和Edge......)。有人能否解释一下为什么它不起作用?


这个很好运行,但是alert()没有弹出。我猜测在那种状态下它被阻止了 https://jsfiddle.net/tbnnpz56/2/ (多次点击运行并观察控制台) - Brain Foo Long
4个回答

3
自2011年5月25日起,HTML5规范规定,在此事件期间可能会忽略对window.alert()、window.confirm()和window.prompt()方法的调用。有关更多详细信息,请参见HTML5规范。 还要注意,各种移动浏览器忽略事件结果(即,它们不会询问用户进行确认)。Firefox在about:config中有一个隐藏的首选项来执行相同的操作。本质上,这意味着用户始终确认可以卸载文档。 此外,使用return语句在离开前提示用户。
window.addEventListener("beforeunload", function() {
   return "hi";
});

我不想提示用户,我只想拦截事件并根据它执行操作。 - Mario Stoilov
你确切想做什么? - Steve Wakeford
我想检查页面是否实际询问了用户是否要离开该页面。 - Mario Stoilov
我注意到在Firefox中测试这个程序是间歇性的,好像它记住了我的答案以便离开页面。当我在IE中测试时,它始终显示console.log、返回字符串的对话框,甚至警告框。 - Steve Wakeford
你可以“做一些事情”,但是正如你所看到的,“alert”可能不起作用。 - Mister M
SO上的其他问题也表明,根据浏览器的不同,Ajax调用可能是不可能的,但我还没有测试过。 - Steve Wakeford

0

function myFunction() {
    return "Write something clever here...";
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body onbeforeunload="return myFunction()">
  
  </body>


我不想提示用户,我只想截获事件并根据其执行相关操作。 - Mario Stoilov
@mariostoilov,你找到了一个不需要提示用户就可以调用函数的解决方案吗? - Freitz
我记不起来是否这样做了。我已经离开需要这个代码的项目很久了。 - Mario Stoilov

0

这样做:

  window.onbeforeunload = function (e) {
          console.log("unloading");
          return "Hi";
      };

当页面卸载时,它将会触发Hi的警报,并在控制台中打印unloading


0

你必须从 onbeforeunload 中返回:

(function() {
  window.onbeforeunload = function () {
      alert("hi")
      console.log("unloading");
      return null;
      };
    })();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接