0

我只在 Firefox 中有一个奇怪的问题。

我将项目保存到 localStorage(其中一个是一个非常大的 JSON 对象,我用 JSON.stringify 对其进行了字符串化)。问题是当我尝试在 localStorage 对象上使用 removeItem() 时,它会清除整个事情。所有属性都被清除。但是,如果我刷新页面,属性就会回来。这适用于 Safari、Chrome 和 Opera(最新版本),但只有 Firefox 有这个奇怪的问题。

我已将问题隔离到我调用 localStorage.removeItem("value") 的一行中。有没有人见过这样的事情?

我什至对窗口对象上的“存储”事件进行了一些调试,只是为了看看发生了什么。我包括了下面的输出。当我尝试删除一个属性,任何属性时,所有这些都会回来。

altKey 未定义

attrChange 未定义

attrName 未定义

冒泡假的

可取消的错误

ctrlKey 未定义

currentTarget Window 周末度假

数据未定义

委托目标窗口周末度假

事件阶段 2

handleObj 对象 { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真的

元键未定义

原始事件存储

相关节点未定义

相关目标未定义

shiftKey 未定义

srcElement 未定义

目标窗口周末度假

时间戳 1340773330422505

输入“存储”

查看未定义

哪个未定义

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

防止默认函数()

stopImmediatePropagation 函数()

停止传播函数()

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

altKey 未定义

attrChange 未定义

attrName 未定义

冒泡假的

可取消的错误

ctrlKey 未定义

currentTarget Window 周末度假

数据未定义

委托目标窗口周末度假

事件阶段 2

handleObj 对象 { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真的

元键未定义

原始事件存储

相关节点未定义

相关目标未定义

shiftKey 未定义

srcElement 未定义

目标窗口周末度假

时间戳 1340773330470620

输入“存储”

查看未定义

哪个未定义

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

防止默认函数()

stopImmediatePropagation 函数()

停止传播函数()

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

altKey 未定义

attrChange 未定义

attrName 未定义

冒泡假的

可取消的错误

ctrlKey 未定义

currentTarget Window 周末度假

数据未定义

委托目标窗口周末度假

事件阶段 2

handleObj 对象 { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真的

元键未定义

原始事件存储

相关节点未定义

相关目标未定义

shiftKey 未定义

srcElement 未定义

目标窗口周末度假

时间戳1340773331099462

输入“存储”

查看未定义

哪个未定义

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

防止默认函数()

stopImmediatePropagation 函数()

停止传播函数()

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

altKey 未定义

attrChange 未定义

attrName 未定义

冒泡假的

可取消的错误

ctrlKey 未定义

currentTarget Window 周末度假

数据未定义

委托目标窗口周末度假

事件阶段 2

handleObj 对象 { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真的

元键未定义

原始事件存储

相关节点未定义

相关目标未定义

shiftKey 未定义

srcElement 未定义

目标窗口周末度假

时间戳 1340773332394871

输入“存储”

查看未定义

哪个未定义

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

防止默认函数()

stopImmediatePropagation 函数()

停止传播函数()

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

altKey 未定义

attrChange 未定义

attrName 未定义

冒泡假的

可取消的错误

ctrlKey 未定义

currentTarget Window 周末度假

数据未定义

委托目标窗口周末度假

事件阶段 2

handleObj 对象 { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真的

元键未定义

原始事件存储

相关节点未定义

相关目标未定义

shiftKey 未定义

srcElement 未定义

目标窗口周末度假

时间戳 1340773332395014

输入“存储”

查看未定义

哪个未定义

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

防止默认函数()

stopImmediatePropagation 函数()

停止传播函数()

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

altKey 未定义

attrChange 未定义

attrName 未定义

冒泡假的

可取消的错误

ctrlKey 未定义

currentTarget Window 周末度假

数据未定义

委托目标窗口周末度假

事件阶段 2

handleObj 对象 { type="storage", origType="storage", guid=9}

jQuery17207456704310204192 真的

元键未定义

原始事件存储

相关节点未定义

相关目标未定义

shiftKey 未定义

srcElement 未定义

目标窗口周末度假

时间戳1340773361375308

输入“存储”

查看未定义

哪个未定义

isDefaultPrevented returnFalse()

isImmediatePropagationStopped returnFalse()

isPropagationStopped returnFalse()

防止默认函数()

stopImmediatePropagation 函数()

停止传播函数()

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 回答