9

我正在为 Android 和 Chrome开发一个 HTML5 应用程序。我遇到的问题源于跟踪打开的浏览器选项卡的要求。我通过创建存储在每个选项卡的 sessionStorage 中的唯一 ID 来做到这一点。然后,我通过在每个选项卡都可以访问的 localStorage 数组中注册每个 ID 来跟踪打开的选项卡。

问题是使用 window.onunload 事件关闭选项卡时,我无法从 localStorage 中删除 ID。该代码在桌面 Chrome 中运行良好,但我无法在 Android 中运行。

$(window).on('beforeunload', function () {
    removeWindowGUID(); 
});

function removeWindowGUID() {
    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));
}

重新加载页面时会触发此事件,这很好,只是不会在关闭时触发。我也尝试过使用 pagehide 事件。

4

2 回答 2

3

取决于浏览器。有的用.onunload,有的用onbeforeunload

最快的解决方案是

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));
});

使用原生安卓浏览器在姜饼、ICS 和果冻豆上进行测试。

于 2013-07-08T20:12:26.673 回答
0

我做了类似的事情,错误完全相同。我注意到如果以编程方式调用 window.close() ,则会调用该事件。我刚刚在页面上添加了我自己的“关闭”按钮。

于 2020-04-14T18:36:17.757 回答