0

我有一个 unload 和 beforeunload 事件定义为:

   window.onunload =  (function () {
        alert("In unload); } ());
   window.beforeonunload = (function () {
        alert("In unload); } ());

当页面第一次加载或回发后(不是之前)时,会显示警报。它不应该。这发生在 Firefox 和 Chrome 中,但不在 IE 中。为什么?看来 IE 有正确的行为。

4

1 回答 1

1

好的,首先,您在 s 上缺少引号,因此它根本alert不应该提醒。

为了解决您的实际问题,您正在调用该函数,而不仅仅是声明它。

(function (){
    alert();
}())

(你也写beforeonunload。这是不正确的。应该是onbeforeunload) 

这会创建一个匿名函数并立即调用它。它们在 JavaScript 中通常称为 IIFE。要添加事件处理程序,您必须传递对函数的引用。所以这里正确的方法是这样的:

window.onunload =  function () {
     alert("In unload");
};
window.onbeforeunload = function () {
     alert("In unload");
};​

在您的情况下,分配给事件的是undefined,因为您的匿名函数没有return任何作用。如果它return具有功能,它将完美地工作。

Chrome 倾向于阻止 onunload 和 onbeforeunload 警报,因为这些通常是垃圾网站,试图阻止用户离开。然而,一个console.log完美的作品。检查演示。打开控制台,单击运行,因为当您单击运行时,代码会刷新,框架会重新加载,并且您会在页面被卸载之前触发事件,然后再次加载。

于 2012-10-23T07:39:41.097 回答