Chrome和Firefox中的LocalStorage异常

时间:2015-06-04 22:49:59

标签: javascript jquery html5 google-chrome

我创建了一个使用localStorage的网站,但我主要在Opera中测试过它。

网站获取本地存储数据的方式是使用JS for循环:

for (var key in localStorage) { // DO STUFF! }

当我的朋友使用带有chrome和firefox的网站时,他们告诉我它会显示随机字符串。

屏幕显示:http://i.imgur.com/HeXrxoM.png(左侧列表是localstorage键)和http://i.imgur.com/wdtTZ9r.png

我的第一个假设是Chrome或Firefox在每次访问网站时都添加了一些localStorage项目(删除Cookie不会解决问题,因为它们会重新出现)。

问题在于,当我的网站调用users / localStorage时,它只是说“获取所有cookie密钥”并且似乎完全是ALL,即使是浏览器创建的那些。

我只能想到一种方法来修复它,只需阻止chrome和firefox在JS本身中创建的所有关键字,并强制它不被显示。

有什么想法吗?我知道这非常具体,但很麻烦。另外的信息,我已经检查了他们正在使用的扩展,但它们似乎没有麻烦(因为我有相同的一个,这些本地存储异常不是问题)。

感谢所有回复并忍受我:)

另外,我的网站是否有其他人希望报告更多错误:

http://youtube-collections.tumblr.com/

3 个答案:

答案 0 :(得分:1)

正如Mathieu指出的那样,localStorage是一个对象。为了防止它发生,请使用:

for (var key in localStorage) {
    if (localStorage.hasOwnProperty(key)) {
        // do stuff with it
    }
}

或使用来自lodash(_.forEach()),jQuery(jQuery.each())或angular(angular.forEach())的每个方法。

答案 1 :(得分:0)

这是因为localStorage是一个对象。当您使用for循环遍历对象时,您将获得该对象的所有属性,包括其方法。

答案 2 :(得分:0)

使用Object.keys(和avoid for-in loops):

  

Object.keys()方法返回给定对象自己的数组   可枚举的属性,与a提供的顺序相同   for ... in循环(不同之处在于for-in循环枚举   原型链中的属性也是如此。

Source

实施例

var keys = Object.keys(localStorage);
for(var i = 0, key; key = keys[i]; i++) {
   // use key, ie. getItem(key) ...
}