13

標準の Java/SpringMVC/JSP/jQuery Web アプリで、「戻る」(または history.go(-1)) イベントを検出しようとしています。ページに戻ります (ここで、集計コンポーネントによって表示されるバックエンド データを変更できます)。

私は JavaScript で次のことを試しました (これを達成する方法に関する StackExchange のいくつかの投稿に従ってください):

<script type="text/javascript">
$(document).ready(function() {
    window.onpageshow = function(event) {
        console.log("Event:");
        console.dir(event);
        if (event.persisted) {
            alert("non-jQuery - back to page - loaded from bfcache");
        } else {
            alert("non-jQuery - loaded page from server");
        }
    };
    $(window).on("pageshow", function(event){
        console.log("Event:");
        console.dir(event);
        if (event.originalEvent.persisted) {
            alert("jquery - back to page - loaded from bfcache");
        } else {
            alert("jquery - loaded page from server");
        }
    });
});
</script>

persisted私は OpenSUSE Linux を実行しており、FireFox と Chrome (最新バージョン) でこれを試しましたが、イベントの属性が に設定されるたびにfalse(これは、JavaScript コンソールと上記のコードからポップアップするアラートで確認できます)。つまり、サーバーから読み込まれたか、[戻る] ボタン (または [戻る] リンク) を介して再度表示されたかに関係なく、毎回ということです。

私の意図は、ページが [戻る] ボタンまたは呼び出しを介して表示されている場合に、サーバーから更新されたデータを使用して要約コンポーネント/パネルをリロードするために AJAX 呼び出しを行うことでしたhistory.go(-1)

また、ページが bfcache に入れられないようにアンロード ハンドラー (何もしない) を設定しようとしましたが、まだ bf-cached バージョンを表示しているようで、event.persisted(またはevent.originalEvent.persisted) が に設定されていfalseます。

このプロパティは Linux で正しく管理されていますか? コードで愚かなことをしていますか? どんな助けやアイデアも大歓迎です、ありがとう!

4

3 に答える 3

0

私はこれが少し遅れていることを知っていますが、これは私にとってはうまくいきます:

window.onpageshow = function(e) {

    if (e.persisted) {

        alert("Page shown");
        window.location.reload();
    }
};

ドキュメント準備機能では必要ないと思います。上記のようにバニラを使用してください。

于 2014-01-26T01:30:56.327 に答える