7

Mobile Safari は、基本的に現在のページを維持し、別のページに移動すると休止状態になる特別なキャッシュ メカニズムPage Cache(こちら) を使用します。このようにして、ユーザーがボタンを押すと、直前のページを最新の状態ですぐに表示できbackます。

これは Web のナビゲーションやブラウジングに役立ちますが、ユーザーがそのページに移動するたびにそのページの新しいコピーを取得する必要がある場合があるため、特別なケースでは煩わしくなります。(私の場合、ログインとメインページのページに移動する必要があります)。

ユーザーが同じアプリケーションの複数のタブを開くことを妨げるものは何もないことを完全に認識しています。私はそれについて心配していません。

ページがキャッシュされないようにするためのクロス ブラウザ ソリューションは、Safari がページを開いたままにして非表示にして一時停止しているため、役に立ちません。

window.onpageshowと処理は、ブラウザが何らかの理由で 2 回目 (ボタンを押したとき) にイベントをevent.persisted実行しないように見えるため、役に立ちません。onpageshowback

イベントが何であるかを知らない人への注意onpageshow: Apple は、loadおよびイベントの使用をお勧めしません。ページ キャッシュunloadの概念では、これらのイベントは明確な意味を持たないからです。したがって、イベントに期待することを行うことになっています。onpageshowload

4

2 に答える 2

4

別の考えられる解決策は、event.persistedフラグを見て、キャッシュされているかどうかを判断することです。

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};
于 2015-07-22T16:00:09.483 に答える
2

ユーザーが戻るボタンを押すと、以前と同じドキュメント (中断された古いページ) が表示されます。onpagehideそのため、新しいページに移動する直前にイベントを処理してページに変更を加えると、変更はそこに保持されます。

bodyナビゲートする直前にスクリプトブロックを追加してみました:

if (isSafari) {
        window.addEventListener('pagehide', function(e) {
            var $body = $(document.body);
            $body.children().remove();
                $body.append("<script type='text/javascript'>window.location.reload();<\/script>");
        });
    }

ユーザーがページに戻ったときにスクリプトを実行するつもりだった場所でスクリプトがすぐに実行されるため、これは機能しません。

ただし、コールバックを終了した後に DOM の変更を延期した場合(pagehide次のようなもの):

if (isSafari) {
        window.addEventListener('pagehide', function(e) {
            var $body = $(document.body);
            $body.children().remove();

            // wait for this callback to finish executing and then...
            setTimeout(function() {
                $body.append("<script type='text/javascript'>window.location.reload();<\/script>");
            });
        });
    }

多田 効きます!ユーザーが次のページで戻るボタンを押すとすぐに、Safari は中断されたページを読み込み、以前に実行されたことのないスクリプトのこの新しいブロックを実行します。

于 2014-07-02T06:25:39.317 に答える