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

Я пытался следовать примерам на сайте разработчика 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();
    }
}

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

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

Ответы [ 3 ]

20 голосов
/ 27 августа 2010

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

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

2 голосов
/ 26 сентября 2013

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

0 голосов
/ 08 января 2018

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

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

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

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

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