2

我听说 Opera 不支持 beforeunload。还有一些早期版本的 IE。那么我怎样才能将它们一起使用呢?如果我在下面使用,它会在 Firefox 中运行 2 次(它们都可以工作)。

$(window).bind('beforeunload', function () {

});

$(window).unload(function () {

});
4

4 回答 4

3
function unloadHandler(m){
    alert(m);
}
if ($(window).unload) {
    $(window).unload(function() {
       unloadHandler("unload");
    });
} else if ($(window).beforeunload) {
    $(window).bind('beforeunload', function() {
        unloadHandler("beforeunload");
    });
}​
于 2012-05-24T20:08:26.043 回答
3

您需要使用某种标志,或者您可以使用类似http://documentcloud.github.com/underscore/#once

于 2012-05-24T19:59:10.953 回答
3

有几种方法可以做到这一点。以下示例使用全局标志非常简单。

var hasUnloadBeenHandled = false;

function onUnload() {
  if (hasUnloadBeenHandled) {
    return;
  }

  //Whatever you want to be handled on unload OR on beforeunload

  hasUnloadBeenHandled = true;
}

$(window).bind('beforeunload', function () {
  onUnload();
});

$(window).unload(function () {
  onUnload();
});
于 2012-05-24T20:11:59.693 回答
2

我不是 Javascript/JQuery 人,但你不能只使用全局变量来跟踪该方法是否应该运行吗?

就像是

var runme = true;
$(window).bind('beforeunload', function () {
    if(runme){


        runme=false;
    }

});

$(window).unload(function () {
    if(runme){


        runme=false;
    }
});
于 2012-05-24T20:01:37.283 回答