0

私は Firefox だけで奇妙な問題を抱えています。

項目を localStorage に保存しています (そのうちの 1 つは、JSON.stringify で文字列化したかなり大きな JSON オブジェクトです)。問題は、localStorage オブジェクトで removeItem() を使用しようとすると、すべてがクリアされることです。すべてのプロパティがクリアされます。しかし、ページを更新すると、プロパティが戻ってきます。これは Safari、Chrome、および Opera (最新バージョン) で機能しますが、この奇妙な問題が発生するのは Firefox だけです。

localStorage.removeItem("value") を呼び出す 1 行に問題を切り分けました。誰もこのようなものを見たことがありますか?

何が起こっているのかを確認するためだけに、window オブジェクトの "storage" イベントを使用してデバッグを行いました。その出力を以下に含めました。1 つのプロパティ、任意のプロパティを削除しようとすると、このすべてが戻ってきます。

altKey 未定義

attrChange undefined

attrName undefined

泡偽

キャンセル可能な false

ctrlKey 未定義

currentTarget Window 週末旅行

データ未定義

delegateTarget ウィンドウの週末旅行

イベントフェーズ 2

handleObj オブジェクト { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真

メタキー未定義

オリジナルイベント収納

relatedNode undefined

relatedTarget undefined

shiftKey 未定義

srcElement 未定義

ターゲット ウィンドウの週末旅行

タイムスタンプ 1340773330422505

「ストレージ」と入力

未定義のビュー

未定義

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

preventDefault 関数()

stopImmediatePropagation 関数()

stopPropagation 関数()

proto Object { preventDefault=function(), stopPropagation=function(), stopImmediatePropagation=function(), more...} storage changed cityli...0771360 (55行目)

altKey 未定義

attrChange undefined

attrName undefined

泡偽

キャンセル可能な false

ctrlKey 未定義

currentTarget Window 週末旅行

データ未定義

delegateTarget ウィンドウの週末旅行

イベントフェーズ 2

handleObj オブジェクト { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真

メタキー未定義

オリジナルイベント収納

relatedNode undefined

relatedTarget undefined

shiftKey 未定義

srcElement 未定義

ターゲット ウィンドウの週末旅行

タイムスタンプ 1340773330470620

「ストレージ」と入力

未定義のビュー

未定義

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

preventDefault 関数()

stopImmediatePropagation 関数()

stopPropagation 関数()

proto Object { preventDefault=function(), stopPropagation=function(), stopImmediatePropagation=function(), more...} storage changed cityli...0771360 (55行目)

altKey 未定義

attrChange undefined

attrName undefined

泡偽

キャンセル可能な false

ctrlKey 未定義

currentTarget Window 週末旅行

データ未定義

delegateTarget ウィンドウの週末旅行

イベントフェーズ 2

handleObj オブジェクト { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真

メタキー未定義

オリジナルイベント収納

relatedNode undefined

relatedTarget undefined

shiftKey 未定義

srcElement 未定義

ターゲット ウィンドウの週末旅行

タイムスタンプ 1340773331099462

「ストレージ」と入力

未定義のビュー

未定義

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

preventDefault 関数()

stopImmediatePropagation 関数()

stopPropagation 関数()

proto Object { preventDefault=function(), stopPropagation=function(), stopImmediatePropagation=function(), more...} storage changed cityli...0771360 (55行目)

altKey 未定義

attrChange undefined

attrName undefined

泡偽

キャンセル可能な false

ctrlKey 未定義

currentTarget Window 週末旅行

データ未定義

delegateTarget ウィンドウの週末旅行

イベントフェーズ 2

handleObj オブジェクト { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真

メタキー未定義

オリジナルイベント収納

relatedNode undefined

relatedTarget undefined

shiftKey 未定義

srcElement 未定義

ターゲット ウィンドウの週末旅行

タイムスタンプ 1340773332394871

「ストレージ」と入力

未定義のビュー

未定義

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

preventDefault 関数()

stopImmediatePropagation 関数()

stopPropagation 関数()

proto Object { preventDefault=function(), stopPropagation=function(), stopImmediatePropagation=function(), more...} storage changed cityli...0771360 (55行目)

altKey 未定義

attrChange undefined

attrName undefined

泡偽

キャンセル可能な false

ctrlKey 未定義

currentTarget Window 週末旅行

データ未定義

delegateTarget ウィンドウの週末旅行

イベントフェーズ 2

handleObj オブジェクト { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真

メタキー未定義

オリジナルイベント収納

relatedNode undefined

relatedTarget undefined

shiftKey 未定義

srcElement 未定義

ターゲット ウィンドウの週末旅行

タイムスタンプ 1340773332395014

「ストレージ」と入力

未定義のビュー

未定義

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

preventDefault 関数()

stopImmediatePropagation 関数()

stopPropagation 関数()

proto Object { preventDefault=function(), stopPropagation=function(), stopImmediatePropagation=function(), more...} storage changed cityli...0771360 (55行目)

altKey 未定義

attrChange undefined

attrName undefined

泡偽

キャンセル可能な false

ctrlKey 未定義

currentTarget Window 週末旅行

データ未定義

delegateTarget ウィンドウの週末旅行

イベントフェーズ 2

handleObj オブジェクト { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真

メタキー未定義

オリジナルイベント収納

relatedNode undefined

relatedTarget undefined

shiftKey 未定義

srcElement 未定義

ターゲット ウィンドウの週末旅行

タイムスタンプ 1340773361375308

「ストレージ」と入力

未定義のビュー

未定義

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

preventDefault 関数()

stopImmediatePropagation 関数()

stopPropagation 関数()

proto Object { preventDefault=function(), stopPropagation=function(), stopImmediatePropagation=function(), more...} storage changed cityli...0771360 (55行目)

4

1 に答える 1

0

申し訳ありませんが、これを説明する方法すら知りませんでしたが、ここで答えを見つけました:http: //treasonx.com/blog/2012/05/08/firefox-localstorage-bug/

次のようにすると、バグが発生します。localStorageとの最初の対話がremoveItemである場合、localStorageオブジェクトから適切な長さを取得できません。localStorage内のすべてのアイテムが削除されたように見えます。これは当てはまりません。ブラウザはlocalStoageのコンテンツでキャッシュを更新していません。

これは、問題が修正されるまでの推奨される回避策です。

今のところ回避策は、localStorageを使用する他の操作の前に、localStorageオブジェクトの長さを取得して、期待どおりに機能するようにすることです。

于 2012-06-27T13:16:40.623 に答える