Как я могу заставить событие запускаться каждый раз, когда localStorage обновляется в Safari 5+?

Я пытался следовать примеры на сайте разработчиков Safari.

В документации предлагается добавить прослушиватель событий следующим образом:

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

А затем установите функцию обработчика следующим образом:

function storage_handler(evt)
{
    alert('The modified key was '+evt.key);
    alert('The original value was '+evt.oldValue);
    alert('The new value is '+evt.newValue);
    alert('The URL of the page that made the change was '+evt.url);
    alert('The window where the change was made was '+evt.source);
}

Но я не могу заставить этот код работать ни на моем компьютере (OS X 10.6, Safari 5.01), ни на Safari на моем iPhone 3GS (iOS 4.02).

В этой статье предлагается отдельный метод:

window.onload = function() {
    ...
    document.body.setAttribute("onstorage", "handleOnStorage();");
}

function handleOnStorage() {
    if (window.event && window.event.key.indexOf("index::") == 0){
        $("stats").innerHTML = "";
        displayStats();
    }
}

Но и с этим мне не повезло.

Я делаю что-то неправильно? Это ошибка?


person Jason    schedule 25.08.2010    source источник
comment
Я исправил для вас ссылки в вашем вопросе; вы сможете добавить больше ссылок в ближайшее время, как только вы получите немного больше репутации. К сожалению, я не знаю ответа на ваш вопрос. Надеюсь, что кто-то еще может помочь!   -  person Brian Campbell    schedule 25.08.2010
comment
Хорошая демонстрация с фрагментом кода уже доступна здесь, что помогает понять концепцию и принцип ее работы. html5demos.com/storage-events   -  person Muhammad Soliman    schedule 20.09.2015
comment
тем не менее, у вас есть эта ссылка, которая также может помочь в понимании sessionStorage nczonline.net/blog/2009/07/21/introduction-to-sessionstorage   -  person Muhammad Soliman    schedule 20.09.2015


Ответы (3)


После дальнейшего изучения (и с помощью друга) я обнаружил, что метод storage_handler вызывается не тогда, когда значение значения localstorage изменяется на странице в моем текущем окне или вкладке, а когда оно изменяется в другой вкладке.

Например, если у меня открыты две вкладки и на каждой вкладке есть элементы управления для изменения настроек локального хранилища, то, когда я нажимаю элемент управления на первой вкладке, на другой вкладке вызывается метод storage_handler.

person Jason    schedule 26.08.2010

Если вы хотите выполнить какое-либо действие после того, как объекты будут сохранены в локальном хранилище на той же странице, вы можете вручную вызвать функцию после вызова localStorage.setItem и вызвать ту же функцию из прослушивателя событий storage для обработки нескольких вкладок.

person subham.saha1004    schedule 26.09.2013

Я понимаю, что это вопрос о Safari, но, согласно сети разработчиков Mozilla, StorageEvent запускается только в том случае, если объект веб-хранилища изменяется за пределами страницы, например, на другой вкладке.

https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

Прокрутите вниз до «Реагирование на изменения хранилища с помощью StorageEvent».

(Я бы добавил это как комментарий к принятому ответу, но у меня нет представителя для этого.)

person nklatt    schedule 08.01.2018