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

ネイティブ Android ブラウザを使用して、ジンジャーブレッド、ICS、ジェリー ビーンでテスト済み。

于 2013-07-08T20:12:26.673 に答える