2016-07-01 18 views
0

Ich habe zwei Browserfenster A und B offen nebeneinander.jQuery: Feuerereignis in anderen Registerkarte/Fenster

Wenn jemand eine Schaltfläche in Fenster klickt A ich eine Funktion in Fenster B ausgeführt werden soll.

ich zur Zeit mit dem hashchange Ereignis in Fenster B und die window.open (myurl, myurl) in Fenster Ein das andere Fenster sagen, um die Funktion zu starten läuft, aber das funktioniert nicht sehr gut, wenn sich die URL ändert.

Gibt es eine andere Lösung in Javascript, um Ereignisse außerhalb des aktuellen Fensters zu initiieren?

+1

Werfen Sie einen Blick auf [Window.postMessage()] (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage). –

Antwort

1

Eine Möglichkeit, die ich mir vorstellen kann, ist, eine localStorage-Änderung zu provozieren, die die andere Registerkarte/das andere Fenster erkennt, solange beide derselben Domäne angehören und dieselbe localStorage teilen. Wenn in Ihrer Ereignistriggerung Registerkarte Sie so etwas tun:

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

Dann können Sie diese Änderung auf der anderen Tab/Fenster erkennen und darauf reagieren (hier bin ich mit JQuery ist, ähnlich mit reinem 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 ;) 
    } 
}); 

der Grund, die localstorage zweimal im Auslöse Fenster zum ändern der Lage sein, die Veranstaltung wieder auszulösen (im selben Fenster oder anderen) mit dem gleichen Code, da Sie die Änderung der localstorage Variable erfassen von einem bekannten Wert zu einem anderen bekannten Wert.

Sie können sogar verschiedene neue Werte festlegen, um andere Informationen an die anderen Registerkarten/Fenster zu senden. Hoffe es hilft.

+0

Wunderbare Antwort! Ich verwende bereits den lokalen Speicher, um dem anderen Fenster mitzuteilen, welcher Inhalt sich geändert hat. Aber ich war mir des Speicherereignisses nicht bewusst. Vielen Dank! – typocoder