使用onbeforeunload没有对话框?

时间:2013-06-19 09:45:33

标签: javascript jquery onbeforeunload

我正在尝试在用户离开我的网页时发布数据。我终于找到了一个可行的解决方案,但是,当用户离开时,它会显示一个确认对话框。我试过了return null;但它没有用。是否可以禁用对话框?

window.onbeforeunload = function() {
    $.post("track.php", {
        async: false,
        refid: refid,
        country: country, 
        type: type,
    });

    return '';
}

6 个答案:

答案 0 :(得分:36)

来自Mozilla Developer Network page

  

当此事件返回非void值时,系统会提示用户   确认页面卸载。

这意味着处理程序的返回值必须为undefined(不是''falsenull),以避免触发确认提示。

window.onbeforeunload = function() {

  $.post("track.php", {
  ...
  });

  return undefined;
}

在javascript中,您可以完全跳过返回值以获得相同的结果。

在使用jquery的coffeescript中,它就像

$(document).ready ->
  $(window).bind('beforeunload', ->
    #put your cleanup code here
    undefined
  )

答案 1 :(得分:5)

如果您想禁用该对话框,请只写

window.onbeforeunload = function() { ... return; }

而不是

window.onbeforeunload = function() { ... return ''; }

我希望它会对你有所帮助。

答案 2 :(得分:2)

你可以测试一下:

$(window).on('beforeunload', function (e) {
    if (e.originalEvent) $.post("track.php", {
        async: false,
        refid: refid,
        country: country,
        type: type,
    });
    else $.get("", {
        async: false
    });
    $(this).trigger('beforeunload');
}

这会产生许多无用的请求,但应该让您第一次请求有足够的时间到达服务器。

答案 3 :(得分:2)

删除return语句对我也有用。

答案 4 :(得分:0)

我找到了一个非常简单的技巧,可以使用

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

$.post("track.php", {
async: false,
refid: refid,
country: country, 
type: type,
});

});

答案 5 :(得分:0)

这是用反应和打字稿:

  useEffect(() => {
    window.onbeforeunload = (ev: any) => {
      ev.preventDefault()
      anotherMethod()
    }
  }, [])