Подтвердить что ты не робот

Как я могу запускать событие каждый раз, когда 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();
    }
}

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

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