web-dev-qa-db-ja.com

window.history.pushState関数を使用すると、「履歴」エラーで「pushState」を実行できませんでした

JavascriptMVCアプリケーションでwindow.historyを使用して、各コントローラーのバック/フォワード/リフレッシュ機能を有効にしています。新しいコントローラーを読み込むたびに、window.history.pushStateを使用して新しい状態を履歴に追加しています。次に、戻る/更新時に、保存された状態を使用し、データを再利用してコントローラーを再度ビルドします。

特定のシナリオで1つの問題を除いて、アイデア全体がうまく機能します。次のエラーが発生します。

「履歴」で「pushState」を実行できませんでした:オブジェクトを複製できませんでした。

同じデータが他のシナリオで問題なく追加されます。このエラーの原因は何ですか?援助をありがとう。

25
Boltosaurus

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

「状態オブジェクトはシリアル化可能なものであれば何でもかまいません。Firefoxはユーザーのディスクに状態オブジェクトを保存するため、ユーザーがブラウザーを再起動した後でも復元できるため、状態オブジェクトのシリアル化された表現に640k文字のサイズ制限を課しています。シリアル化された表現がこれよりも大きい状態オブジェクトをpushState()に渡すと、メソッドは例外をスローします。これ以上のスペースが必要な場合は、sessionStorageまたはlocalStorage、あるいはその両方を使用することをお勧めします。 "

単純な答えのように見えますが、渡されている状態が640kを超える値にシリアル化されている可能性があります。私はこのバグに遭遇しました、そしてそれが原因であるとほぼ確信しています。

43
Greg Beaver

window.history.pushState640k文字の文字列サイズ制限

localStorageまたはsessionStorageに切り替えてください。

ソースhttps://developer.mozilla.org/en-US/docs/Web/API/History/pushState

0
Jaspreet Singh