onbeforeunload事件可以“太慢”完成吗?我错过了什么?

时间:2014-10-15 04:21:41

标签: javascript safari cross-browser pubnub

这似乎是一种常见的抱怨,但我没有看到任何确切的重复,更重要的是我没有看到任何有效的答案,所以我加入了人群。 / p>

我有一些代码

window.onbeforeunload = function() { PubNub.publish(...); };

在用户离开当前页面时将消息发布到PubNub channel。这是一个聊天论坛,我们想要发布用户X不再在房间里的事实。 (请压制建议其他设计的冲动,例如让每个用户发送心跳;这只是我正在玩的玩具项目。)

在另一个浏览器标签中观看频道,我发现当我

时,百分之百的PubNub消息会成功发布
  • 关闭标签

偶尔(是和否)我

  • 点击地址栏中的圆圈图标
  • 进行刷新

但显然从来没有我

  • 点击链接
  • 离开
  • 在地址栏中输入新网址
  • 通过在地址栏中输入相同的网址进行刷新
  • 点击⌘R
  • 进行刷新

请注意,即使将return "please don't exit";放入我的onbeforeunload处理程序也会导致发布不明确:有时我在地址栏中输入相同的URL并发布发布,有时我会输入相同的URL并且发布不会发生。

这是Safari的一些怪癖,如果有的话,有一个已知的解决方法吗? 或者,在onbeforeunload事件期间,PubNub.publish()以某种方式“太慢”或“太多线程”才能成功?我真的不明白onbeforeunload是如何工作的。

(目前,可以访问整个代码here,但如果您从现在起一个月内阅读此问题,请注意该链接可能已停用和/或已修复。)

1 个答案:

答案 0 :(得分:0)

这就是我们的Presence功能。在这里查看:

http://www.pubnub.com/docs/javascript/overview/presence.html

这样,当您“离开”频道时,Presence系统可以将此广播给有兴趣的人。这是你在找什么?

geremy