Слушатель событий localStorage не запускается в Chrome для локального файла - программирование
Подтвердить что ты не робот

Слушатель событий localStorage не запускается в Chrome для локального файла

Мне нужно получить уведомление при изменении localStorage. Этот код отлично работает в Firefox 24, но не работает в Chrome 29 (или 30) или в IE 10. Он также работает на реальном сервере, но не тогда, когда я тестирую локальный файл (file:///).

Вот код:

<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('#submit').click(function() {
                console.log('Clicked');
                if($('#username').val() != "")
                    localStorage.setItem('someItem', 'someValue');
            });
            $(window).bind('storage', function(e) {
                alert('change');
            });


        });
    </script>
</head>
<body>
<input type="text" id="username" name="username" value="" />
<a href="#" id="submit">Click me</a>
<p id="result"></p>
</body>
</html>

В чем проблема с этим в Chrome? Я открываю две вкладки по мере необходимости.

4b9b3361

Ответ 1

Он будет запускать событие только в "других" вкладках/окнах, но не в том, что он меняет данные (это немного непонятно в вашем вопросе, поэтому, пожалуйста, исправьте меня, если я неправильно понял).

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

Источник W3C

Обновить, чтобы завершить ответ на основе комментариев:

В некоторых браузерах будут ограничения, если страница выполняется из файла протокола (file:///) из-за соображений безопасности.

В Chrome вы можете переопределить это, предоставив аргумент --allow-file-access-from-files:

chrome.exe --allow-file-access-from-files

Я не уверен, что вы можете сделать что-то подобное с другими браузерами. Я бы рекомендовал тестировать локальный сервер (например, Mongoose), чтобы не запускать никаких сюрпризов в реальном сценарии.