【问题标题】:window.onbeforeunload doesn't trigger on Android Chrome [alt. solution?]window.onbeforeunload 不会在 Android Chrome [alt.解决方案?]
【发布时间】:2016-06-17 04:53:25
【问题描述】:

我开发了一个简单的聊天应用程序,我使用$window.onbeforeunload 在有人关闭选项卡/浏览器时通知其他用户(基本上是当用户离开房间时)。

这是我的代码

$scope.onExit = function() {
        $scope.chatstatus.$add({
            status: $scope.getUsername + ' left'    
        });
    };

    $window.onbeforeunload =  $scope.onExit;

这在桌面浏览器上运行得非常好,但在 Android Chrome 浏览器上却不行。 onbeforeunload 函数根本没有被触发。

请提出解决方案/解决方法。谢谢。

编辑:如 cmets 中所述,这是一个已知问题,如果不是解决方案,请提出解决方法。

【问题讨论】:

标签: javascript android angularjs google-chrome


【解决方案1】:

看来您需要同时检查 onbeforeunload 和 onunload。

这个答案看起来是个不错的方法。

Android Chrome window.onunload

window.onunload = window.onbeforeunload = function() {
    var guid = sessionStorage.getItem("WindowGUID");
    var tmp = JSON.parse(localStorage.getItem("WindowGUIDs"));
    tmp = tmp.remove(guid);  // remove is a custom prototype fn
    localStorage.setItem("WindowGUIDs", JSON.stringify(tmp));
});

【讨论】:

  • 我的错误,我只得到了“这适用于 Chrome”的评论。从搜索来看,这实际上是移动 Chrome 中一个由来已久的问题。 bugs.chromium.org/p/chromium/issues/detail?id=339341
  • 有什么方法可以使用 X 按钮或类似按钮实现自己的“关闭”功能?然后在服务器上有一些东西定期检查客户端是否已连接。或者,围绕 Angular 应用程序定期检查您的服务器的另一种方式。只是一些让您的功能正常工作的随机建议。
  • 谢谢。但是,如果用户选择关闭浏览器选项卡而不是 X 按钮,那么我们将再次遇到同样的问题。
  • 这就是为什么我建议检查它们是否以某种方式定期连接。
  • 我使用了 window.onunload = window.onbeforeunload 但在 Android Chrome 中不起作用。其他浏览器都可以,IOS Chrome 也可以。
猜你喜欢
  • 2012-09-05
  • 2011-10-29
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2013-10-11
  • 2023-01-09
  • 2018-06-10
  • 1970-01-01
相关资源
最近更新 更多