2011-01-04 3 views
2

Событие, которое должно быть запущено при изменении localStorage, кажется, не содержит информации в Firefox.Неопределенные свойства в событии local storage хранилища

Я создал следующий обработчик события:

function storageEventHandler(e){ 
     alert("key " + e.key); 
     alert("oldValue " + e.oldValue); 
     alert("newValue " + e.newValue); 
     alert("url " + e.url); 
} 

window.addEventListener('storage', storageEventHandler, false); 

который должен инициироваться этим:.

localStorage.setItem('foo', 'bar');

Однако все свойства в случае (например, e.key и все остальное), все не определены. Я использую firefox 3.16. Почему свойства события не определены?

EDIT. Вот весь код, который я использую. Пожары событий хранения в Firefox 3.16, но не в Firefox 4.0b8

Кроме того, важно, я бегу это от XAMPP http://localhost/index.html Запуск из файла: // сделать его умирать localStorage Getting NULL?

<!DOCTYPE html5> 
<html lang="en"> 
<head> 
    <script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script> 
     $(function() { 
      var edit = document.getElementById('edit'); 

      $(edit).blur(function() { 
       localStorage.setItem('todoData', this.innerHTML); 
      }); 

      // when the page loads 
      if (localStorage.getItem('todoData')) { 
       edit.innerHTML = localStorage.getItem('todoData'); 
      } 

      window.addEventListener('storage', storageEventHandler, false); 

      function storageEventHandler(e){ 
       alert('localStorage event fired') 
      } 
     }); 
    </script> 
</head> 
<body> 
<header> 
    <h1> My Simple To-Do List </h1> 
</header> 
<section> 
<ul id="edit" contenteditable="true"> 
    <li></li> 
</ul> 
</section> 
    <em>Add some items, and refresh the page. It'll remember what you typed.</em> 
</body> 
</html> 

EDIT # 2 : Вот простой пример, который показывает проблему между браузерами ...

<html> 
<head> 
<script> 
    function storageEventHandler(e){ 
     alert('localStorage event fired') 
    } 
    window.addEventListener('storage', storageEventHandler, false); 
    localStorage.setItem('foo', 'bar'); 
    alert('ok') 
</script> 

</head> 
    <body> 
    Test 
    </body> 
</html> 

ответ

7

Firefox 3.6 (Gecko 1.9.2) не реализует эти свойства (спецификация меняется и большинство других браузеров в то время Ждет» t impl Эти свойства тоже). Это исправлено в Firefox 4 (Gecko 2). См. https://bugzilla.mozilla.org/show_bug.cgi?id=501423

[изменить] ваш тестовый файл является одностраничным. spec говорит:

Когда SetItem(), RemoveItem(), и ясно() методы вызываются на объект хранения х, который связан с локальной областью хранения, если методы сделали что-то, то в каждом Объект HTMLDocument, объект хранилища объекта LocalStorage объекта Window связан с той же областью хранения, , кроме x, событие хранения должно быть запущено, как описано ниже.

Для того, чтобы наблюдать это событие, вам понадобится отдельная страница в этом домене.

+0

спасибо! Очень полезно и ценно :) – Alexis

+0

к сожалению ничего не работает в Firefox 4 = ( – Alexis

+0

@Alexis K: есть тестовая версия? Какую версию вы тестируете? – Nickolay

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