2015-06-04 3 views
0

Я сделал сайт, который использует localStorage, но я в основном тестировал его в Opera.LocalStorage аномалии в Chrome и Firefox

Путь веб-сайт получает локально сохраненные данные с помощью JS для цикла:

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

Когда мои друзья использовали веб-сайт с хромом и светлячок они сказали мне, что это отображает случайные строки.

Экраны здесь: http://i.imgur.com/HeXrxoM.png (список слева ключи LocalStorage) и http://i.imgur.com/wdtTZ9r.png

Мой первый предположение, что Chrome или Firefox добавлены некоторые элементы LocalStorage на каждом посещении веб-сайта (удаление куки не исправить проблема по мере их возникновения).

Проблема заключается в том, что когда мой сайт требует пользователей/localStorage, он просто говорит «получить все ключи cookie» и, кажется, получает буквально ВСЕ, даже те, которые создаются браузерами.

Я могу только подумать об одном способе исправить это, просто заблокировав все ключевые слова, которые создаются хром и firefox внутри самой JS, и заставляя его не отображаться.

Любые идеи? Я знаю, что это чрезвычайно специфично, но это хлопотно. Дополнительная информация, я уже проверял расширения, которые они использовали, но они, похоже, не являются проблемой (потому что у меня есть одно и то же, и эти аномалии localstorage не являются проблемой).

Спасибо всем ответы и мирятся со мной :)

Кроме того, мой сайт, если кто-либо желает сообщить больше ошибок:

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

ответ

0

Использование Object.keysavoid for-in loops):

The Object.keys() метод возвращает массив собственных перечислимых свойств заданного объекта, в том же порядке, что, предоставляемой для ... (разница заключается в том, что цикл for-in перечисляет также свойства в цепочке прототипов).

Source

Пример

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

Это сработало. Существуют ли какие-либо аналогичные способы проверки наличия локального хранилища на веб-странице, а не, скажем, расширения браузера? Благодаря :) –

0

Это потому, что LocalStorage является объектом. Когда вы перебираете объект с циклом for, вы получите все свойства этого объекта, включая его методы.

+0

Как я уже сказал, это не происходит на Opera, так почему это происходит на светлячок и хром? И есть ли другие исправления?Спасибо за ответ кстати :) –

+0

У меня нет подсказки, почему он работает в Opera, но он не должен;) @zwacky предоставил остальную часть ответа, пока я все еще смотрел, поэтому взгляните на это:) –

1

Как указал Матье, localStorage является объектом. Для того, чтобы не допустить этого использовать это:

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

или использовать методы Foreach от lodash (_.forEach()), JQuery (jQuery.each()) или угловым (angular.forEach()).

+0

Извините, если это вопрос супер-нуба, но что делает для методов Eee? –

+0

О, ладно, я понял это для себя: D спасибо за главный ответ, это должно работать немного. –

Смежные вопросы