我创建了一个使用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本身中创建的所有关键字,并强制它不被显示。
有什么想法吗?我知道这非常具体,但很麻烦。另外的信息,我已经检查了他们正在使用的扩展,但它们似乎没有麻烦(因为我有相同的一个,这些本地存储异常不是问题)。
感谢所有回复并忍受我:)
另外,我的网站是否有其他人希望报告更多错误:
答案 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循环枚举 原型链中的属性也是如此。
var keys = Object.keys(localStorage);
for(var i = 0, key; key = keys[i]; i++) {
// use key, ie. getItem(key) ...
}