为什么Firefox和Chrome的Unload事件会在初始获取或回发后触发?

时间:2012-10-23 07:32:47

标签: javascript firefox google-chrome

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

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

当页面首次加载或回发后(之前)加载时,警报会显示。它不应该。这种情况发生在Firefox& Chrome但不在IE中。为什么? IE似乎有正确的行为。

1 个答案:

答案 0 :(得分:1)

好的,首先,你在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完美无缺。检查demo。打开控制台,单击“运行”,然后单击“运行”时,将刷新代码,重新加载框架,并在卸载页面之前触发事件,然后再次加载。