13

次のハンドラーがあります。

        $(window).bind('pageshow', function() { alert("back to page"); });

(リンクを押して) ページから移動し、( 「戻る」ボタンを押して) ページに戻ると、alert()は呼び出されません (iPad 2、iOS 5.1)。

私は何を間違っていますか?バインドする必要がある他のイベントはありますか?

PS:ページから移動するときにpagehideが適切に受信されるのは興味深いことです。

4

6 に答える 6

9

イベントのpersistedプロパティを確認できます。pageshow最初のページ読み込み時に false に設定されます。ページがキャッシュから読み込まれると、true に設定されます。

window.onpageshow = function(event) {
    if (event.persisted) {
        alert("back to page");
    }
};

何らかの理由で、jQuery にはイベントにこのプロパティがありません。ただし、元のイベントから見つけることができます。

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
      alert("back to page");
    }
};
于 2012-09-28T23:59:48.517 に答える
7

これはおそらくキャッシュの問題です。「戻る」ボタンを使用してページに戻ると、ページはキャッシュから取得されます (動作はブラウザーに依存します)。このため、ページは既にキャッシュにレンダリングされており、js を再実行するとレイアウトなどに悪影響を与える可能性があるため、JS は起動しません。

これは、レスポンスのキャッシュ ヘッダーを微調整するか、いくつかのブラウザ トリックを使用することで解決できるはずです。

この問題に関するいくつかのリンクを次に示します。

編集

これらはすべて上記のリンクから取得されます。

  • history.navigationMode = 'compatible';
  • <body onunload=""><!-- This does the trick -->
  • 「Firefox 1.5+ および次のバージョンの Safari (バグ 28758 の修正を含む) は、pageshowおよび と呼ばれる特別なイベントをサポートしpagehideます。」
  • jQueryの使用$(document).ready(handler)
  • window.onunload = function(){};
于 2012-04-11T13:51:23.387 に答える
5

そこで行っているのは、の戻り値をalert("back to page")コールバックとしてバインドすることです。それはうまくいきません。代わりに関数をバインドする必要があります。

$(window).bind('pageshow', function() { alert("back to page"); });
于 2012-04-11T13:15:08.123 に答える