【问题标题】:How can I increase the success of "window.OnBeforeUnload" to send an Ajax ping?如何提高“window.OnBeforeUnload”发送 Ajax ping 的成功率?
【发布时间】:2011-09-25 15:06:40
【问题描述】:

我已经阅读了几十个关于 SO 的问题和答案,但没有一个回答我的特定问题......其中大多数都围绕着弹出“哦,你需要保存”消息......这不是我的需要。

我正在我的办公室(不是公共网站)构建一个供内部使用的应用程序,特别是一个“页面”我们希望记录用户的“退出”。

所以,我有这个简单的声明:

window.onbeforeunload = function () {
    $.post('LogExit.aspx');
}

现在,这个post 大部分时间都会失败,因为浏览器不“想要”开始一个新请求,因为它知道页面正在消失......但是,如果我添加一个烦人的alert框,那么它将 100% 的时间发送 ping !!!

例子:

window.onbeforeunload = function () {
    $.post('LogExit.aspx');
    alert("Ha ha ha, I can delay the browser!");
}

所以,我的问题是……我如何确保(或至少增加获得)“LogExit.aspx”ping 的机会?

【问题讨论】:

  • 我不相信这是可能的。我认为一个常见的策略是使用window.open 打开另一个发送请求并自行关闭的窗口,但弹出窗口阻止程序会阻止它。也许您可以尝试发送一个同步的 Ajax 请求...?

标签: javascript ajax cross-browser fire-and-forget


【解决方案1】:

不幸的是,没有 100% 甚至 10% 的“保证”方式来实现这一点……所以,我可以通过 every-10-seconds-send-a-ping 函数来解决我的特殊需求。

由于我的需要是记录一个人查看特定页面的时长,因此上述解决方法有助于至少将其精确到 10 秒窗口。

我真的希望将来有更好的解决方案。

【讨论】:

    【解决方案2】:

    由于您必须提出某种请求并且并不真正关心响应,因此您可以在这种情况下使用图像:

    window.onbeforeunload = function () {
       var img= new Image();
       img.src = "LogExit.aspx";
       // you have to check on your server to see if it worked :)
    }
    

    【讨论】:

    • 如果这在许多不同的浏览器中都能可靠地工作,那就太聪明了。
    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 2013-12-07
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多