Неопределенные свойства в событии хранилища localStorage - PullRequest
2 голосов
/ 04 января 2011

Событие, которое должно сработать при изменении localStorage, похоже, не содержит информации в Firefox.

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

 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.Почему свойства события не определены?

РЕДАКТИРОВАТЬ.Вот весь код, который я использую.Событие хранилища запускается в Firefox 3.16, но не в Firefox 4.0b8

Также важно, что я запускаю его из XAMPP http://localhost/index.html Запуск его из файла: // заставляем его умереть localStorageNULL?

<!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>

РЕДАКТИРОВАТЬ # 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>

1 Ответ

8 голосов
/ 06 января 2011

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

[править] Ваш тестовый набор состоит из одной страницы. spec говорит:

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

Так что вам нужна отдельная страница в том же домене, чтобы наблюдать за событием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...