【问题标题】:Correct way to use onbeforeunload?正确使用onbeforeunload的方法?
【发布时间】:2013-06-14 16:19:37
【问题描述】:

当用户到达我的页面时,我正在尝试发布数据。这适用于 chrome 和资源管理器,也适用于 firefox,但是,在 firefox 上,奇怪的是,它只有在用户关闭页面时才有效。如果他们回去,或者去另一个站点(通过键入地址栏或 whaever)它不会发布数据。我的问题是,使用 onbeforeunload 发布数据的正确方法是什么?

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

      $.post("track.php", {
         async: false,
         ip: ip,
         referer: referer,
         clicks: kactane2,
         scrolls: kactane,
         time: time,
         refid: refid,
         country: country, 
      });

});

【问题讨论】:

  • 没有正确的方法,如果幸运的话,ajax调用会在浏览器有时间重定向之前发生,如果没有,它不会,并且在IE中它通常会重定向之前数据可以发送了。
  • 可能从onbeforeunload返回字符串
  • @user198989 因为它不会也不会像您期望的那样工作。你最好不要全部使用它。
  • 真的没有什么可以让自己更“幸运”。几年前,一个简单的 while 循环可能会延迟足够长的时间,但现代浏览器杀死了它。
  • 我记得另一个问题(目前找不到)想要跟踪人们在页面上停留的时间,并会在 beforeunload 事件上通过 AJAX 发送该数据,但遇到相同的问题(导致给定会话的某些用户的数据完全丢失)。更好的解决方案之一是定期发送数据,以便数据库至少大部分是最新的。如果这对您的数据有意义,也许您可​​以实施定期数据发布。

标签: javascript jquery


【解决方案1】:

没有什么好的方法,因为onbeforeunload 的用途不是这样。

使用onbeforeunload 的正确方法是监听此事件,然后卸载您可能因为用户离开页面而使用的任何数据或资源。你不应该用它来尝试开始新事物。根据HTML5 specificationshowModalDialog()alert()confirm()prompt() 是明确不允许的,这个想法是给你一点时间来干净地清理任何事件处理程序、网络工作者和其他东西。

如果定义了事件处理程序,则可能会向用户显示一个显示"Are you sure you want to leave?" 的页面,但出于安全原因,该表单通常无法自定义,但这取决于浏览器。

您最好将数据设置在 cookie 中或可以快速完成且仅在浏览器中发生的其他东西中,然后在下一页加载时查找该数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2012-02-23
    • 2013-01-09
    • 2010-12-28
    • 2012-04-26
    • 2014-10-24
    • 2013-07-29
    • 2016-08-03
    相关资源
    最近更新 更多