2016-07-01 7 views
0

У меня есть два окна браузера A и B открыт бок о бок.jQuery: событие пожара в другой вкладке/окне

Когда кто-то нажимает на кнопку в окне Я хочу, чтобы запустить функцию в окне B.

настоящее время я использую событие hashchange в окне B и window.open (myurl, myurl) в окне А сказать другое окно, чтобы начать запуск функции, но это не работает очень хорошо, когда URL изменяется.

Есть ли другое решение в javascript для событий init за пределами текущего окна?

+1

Взгляните на [Window.postMessage()] (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage). –

ответ

1

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

localStorage.setItem('detectMyChange', '0'); 
localStorage.setItem('detectMyChange', '1'); 

Затем вы можете обнаружить, что изменение на другой вкладке/окне и среагировать на него (I'm с помощью JQuery здесь, аналогично с чистым Javascript) :

$(window).on('storage', function (e) { 
    var storageEvent = e.originalEvent; 
    if ((storageEvent.key == 'detectMyChange') && (storageEvent.oldValue == '0') && (storageEvent.newValue == '1')) { 
     // Event detected, do some really useful thing here ;) 
    } 
}); 

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

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

+0

Замечательный ответ! Я уже использую локальное хранилище, чтобы сообщить другому окну, какой контент изменился. Но я не знал о событии хранения. Благодаря! – typocoder