Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.03.2014, 02:00
Интересующийся
Отправить личное сообщение для cevut Посмотреть профиль Найти все сообщения от cevut
 
Регистрация: 07.03.2014
Сообщений: 13

Отловить событие storage
Добрый вечер всем любителям DOM'а
Я тут пытаюсь словить событие storage хранилища html5 используя такой код:
window.addEventListener('storage', onStorageEvent, false);

и такую функцию onStorageEvent:
function onStorageEvent(storageEvent){
    alert("storage event");
}

но у меня нет никаких алертов когда я наверняка знаю, что значение ключа в хранилище изменяется. Это потому что я немного черный или я что-то делаю не так?
Ответить с цитированием
  #2 (permalink)  
Старый 07.03.2014, 04:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Событие возникает только при изменении хранилища в других вкладках (окнах).
Пример: открой консоль тут, на форуме, запусти код:
window.onstorage = console.log.bind(console)


Открой дубликат вкладки. Увидишь вывод событий в консоль.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 08.03.2014, 01:01
Аватар для kotamirov
Аспирант
Отправить личное сообщение для kotamirov Посмотреть профиль Найти все сообщения от kotamirov
 
Регистрация: 28.02.2014
Сообщений: 45

var supports_html5_storage = function(){//checked on support properties storage in browsers
	try{
		return 'Storage' in window  &&  window['Storage'] !== null;
	}catch(e){
		return false;
	}
};
window.onload = function(){ 
if(supports_html5_storage){
window.addEventListener('storage',function(e){get_event_of_storage(e);},false);
var get_event_of_storage = function(e){
var state;
	if(e.state != null){//checked exist parameter "state" of storage data
		state = e.state;
alert(state);
}
}
}
}
Ответить с цитированием
  #4 (permalink)  
Старый 08.03.2014, 02:05
Интересующийся
Отправить личное сообщение для cevut Посмотреть профиль Найти все сообщения от cevut
 
Регистрация: 07.03.2014
Сообщений: 13

Спасибо, ребят, я все осознал)
Ответить с цитированием
  #5 (permalink)  
Старый 08.03.2014, 06:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

kotamirov, а в каких случаях код на третьей строчке может бросить исключение?
И твой код абсолютно ничего не поясняет.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 08.03.2014, 09:57
Аватар для kotamirov
Аспирант
Отправить личное сообщение для kotamirov Посмотреть профиль Найти все сообщения от kotamirov
 
Регистрация: 28.02.2014
Сообщений: 45

Сообщение от danik.js Посмотреть сообщение
kotamirov, а в каких случаях код на третьей строчке может бросить исключение?
И твой код абсолютно ничего не поясняет.
если браузер не поддерживает storage.
Ответить с цитированием
  #7 (permalink)  
Старый 08.03.2014, 14:08
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kotamirov
если браузер не поддерживает storage
И с чего бы бросалось исключение? Ведь 'Storage' in window вернет false - не более.

Смотри, ни один браузер не поддерживает сверховую технологию ZdelatyZayebis. Используем твой прием для теста:

function test() {
    try{
        return 'ZdelatyZayebis' in window  &&  window['ZdelatyZayebis'] !== null;
    }catch(e){
        alert('Исключение!!!');
        return false;
    }
}

test();


Как видишь - никакого исключения!!!
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 08.03.2014, 15:30
Аватар для kotamirov
Аспирант
Отправить личное сообщение для kotamirov Посмотреть профиль Найти все сообщения от kotamirov
 
Регистрация: 28.02.2014
Сообщений: 45

Сообщение от danik.js Посмотреть сообщение
И с чего бы бросалось исключение? Ведь 'Storage' in window вернет false - не более.

Смотри, ни один браузер не поддерживает сверховую технологию ZdelatyZayebis. Используем твой прием для теста:

function test() {
    try{
        return 'ZdelatyZayebis' in window  &&  window['ZdelatyZayebis'] !== null;
    }catch(e){
        alert('Исключение!!!');
        return false;
    }
}



test();


Как видишь - никакого исключения!!!
ZdelatyZayebis - не существует в объектах window, а вот localStorage существует!
Вот так, ибо наблюдай прекрасное, должно работать!
try {
return 'localStorage' in window && window['localStorage'] !== null;
} catch (e) {
return false;
}
}
Ответить с цитированием
  #9 (permalink)  
Старый 08.03.2014, 16:04
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kotamirov
ZdelatyZayebis - не существует в объектах window, а вот localStorage существует!
В IE7 ведь не существует! Ведь для этого и задумана проверка, не?
Да и какая разница - существует или не существует. Суть в том что исключение не будет никогда брошено. То есть этот абсолютно бессмысленная обертка в try..catch

Народ, ну кивните чтоли, а то он мне не верит))
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 08.03.2014, 16:06
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kotamirov
а вот localStorage существует!
А почему тогда проверка не на localStorage, а на конструктор Storage?
Кстати, где сказано что в браузерах с поддержкой localStorage/sessionStorage должен быть определен конструктор Storage?
(а то я чутка не уверен что проверка верная)
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить событие в contenteditable? D_Pavel Events/DOM/Window 10 21.01.2014 16:08
Как можно отловить событие смены класса? Emil jQuery 1 26.01.2012 20:55
Отловить событие simple Events/DOM/Window 3 11.05.2011 14:20
Отловить событие изменения элемента pavl Events/DOM/Window 13 13.04.2009 14:00
Как отловить событие onchange на LookUp поле? spps Events/DOM/Window 0 09.09.2008 16:02