9

戻るボタンを使用して DOM が変更されたページに移動すると、IE10 でこの問題が発生することに驚きました。

私は行動1または2のいずれかで満足していましたが、3では満足していませんでした:

  1. 全体の状態を適切に復元します (FF や Chrome のように)
  2. ページをリロードすると (キャッシュされるべきではないため)、変更が Ajax 経由でサーバーにプッシュされたため、現在の状態が再作成される可能性があります (IE8 はこれを行います)。
  3. しかし、IE10は変更されていない最初のページに戻りました(最初のページにフォーム入力があった場合はフォーム入力を保持しますが、状態全体は保持しません)

私は急いでいたので、誰かが DOM の変更を行った後にページにアクセスした場合 (その情報はハッシュに保存されます)、強制的にリロードするようにしました。リロードしますが、今はそうします)。

1 つの提案は、localStorage を使用して状態を記憶することでした。この種の機能もhistory.jsに組み込まれていると思います。

比較のために/状態が復元されない場合に備えて予備のコピーを置いておくのは、特に私たちの場合、おそらく 0.01% のユーザーを苦しめる問題であるため、やり過ぎのように思えます。私の目的では、状態が bfcache に完全に保存されていない場合は、強制的にリロードするだけで十分です。

すべての状態を網羅する bfcache があるかどうかを「単純に」検出できますか? もしそうなら、誰かがDOMが変更されたページに戻ったときに、それがない場合に強制的にリロードできますか?

4

1 に答える 1

1

ブラウザーのユーザーエージェント/ブラウザーが変更された状態を保存しないことがわかっている場合は、ページを更新できます。

または、状態が変更された後に「#modified」を URL に追加することもできます。したがって、URL に「#modified」が含まれていても状態がデフォルトの場合、状態が正しくキャッシュされないため、ページを更新する必要があることがわかります。

if(document.location.hash == "#HelloWorld")
{
    // Check if state is default
    // If state is default, the page should be refreshed
}
document.location.hash = "#HelloWorld";
于 2014-01-21T05:22:33.183 に答える