【问题标题】:Unsubscribe to a PubNub channel in response to (before)unload event取消订阅 PubNub 频道以响应(之前)卸载事件
【发布时间】:2014-07-15 18:39:07
【问题描述】:

我正在使用 PubNub 服务构建一个多人游戏,包括存在插件。

由于我需要检测是否有人意外离开游戏 - 为了向其他玩家发送消息并结束游戏 - 我试图在用户刷新页面或转到其他 URL 时取消订阅。然而,在 Chrome 中 - 与 FireFox 不同 - 没有触发出席事件,这可能意味着用户在离开页面之前没有取消订阅。

代码:

 $(window).bind("unload",function(e) {

    PubNub.ngUnsubscribe({channel:$scope.game.channel});
    e.preventDefault();

    }); 

我知道这些事件(beforeunloadunload)存在问题并且浏览器支持不佳,这可能是失败的原因。如果是这种情况,我可以使用其他任何跨浏览器检测方法吗?

【问题讨论】:

    标签: javascript angularjs pubnub


    【解决方案1】:

    没有可靠的方法来捕捉浏览器关闭。 “beforeUnload”事件是最好的选择,但大多数移动浏览器不会触发它。在 PubNub 中处理用户关闭浏览器的最佳方式是在订阅时指定心跳 (http://www.pubnub.com/docs/javascript/api/reference.html#subscribe)。心跳告诉 PubNub 在不正常断开连接(例如关闭浏览器)后应该等待多少秒,然后再将用户视为超时。这默认为 320,可以设置为低至 6 秒 (> 5)。它仍然不会立即生效,但您将在浏览器关闭 6 秒后收到存在“超时”操作。心跳频率低可能会影响您的电池寿命,因此请注意这一点。

    另外,我知道我将文档链接到 JS API,但角度 ngSubscribe 允许大多数相同的参数。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多