Est-il possible d'avoir une communication événementielle entre les onglets / fenêtres du navigateur?
Je savais que cela pourrait être (au moins théoriquement) possible en utilisant un stockage local . Pourriez-vous fournir un petit exemple de code? Envoyez simplement l'événement dans un onglet, et recevez-le dans un autre.
Existe-t-il des bibliothèques / jquery-plugins qui font cela?
(Je sais que je peux communiquer entre windows / tabs du même navigateur à l'aide de cookies, mais ce n'est pas ce dont j'ai besoin; je préférerais une approche événementielle, je ne veux pas vérifier de nouveau l'état des cookies chaque milliseconde).
Localstorage a des événements auxquels vous pouvez vous abonner pour synchroniser d'autres pages.
Remarque: Si vous mettez à jour la valeur d'une clé dans la fenêtre A, l'événement ne sera pas déclenché dans la fenêtre A. Il sera déclenché dans Windows B & C.
Voici une démo: http://html5demos.com/storage-events
Ouvrez cette page dans plusieurs onglets. Changez la valeur sur l'entrée et voyez-la reflétée dans les divs.
Voici le code Le Javascript:
var dataInput = document.getElementById('data'), output = document.getElementById('fromEvent'); // handle updates to the storage-event-test key in other windows addEvent(window, 'storage', function (event) { if (event.key == 'storage-event-test') { output.innerHTML = event.newValue; } }); // Update the storage-event-test key when the value on the input is changed addEvent(dataInput, 'keyup', function () { localStorage.setItem('storage-event-test', this.value); });
Marquage:
<div> <p>Your test data: <input type="text" name="data" value="" placeholder="change me" id="data" /> <small>(this is only echoed on <em>other</em> windows)</small></p> <p id="fromEvent">Waiting for data via <code>storage</code> event...</p> </div>
La spécification HTML 5 traite de toutes les informations transmises dans l'événement:
[Constructor(DOMString type, optional StorageEventInit eventInitDict)] interface StorageEvent : Event { readonly attribute DOMString key; readonly attribute DOMString? oldValue; readonly attribute DOMString? newValue; readonly attribute DOMString url; readonly attribute Storage? storageArea; }; dictionary StorageEventInit : EventInit { DOMString key; DOMString? oldValue; DOMString? newValue; DOMString url; Storage? storageArea; };
À partir de: http://www.w3.org/TR/webstorage/#the-storage-event
À l'aide de cet événement, vous pouvez réformer d'autres pages lorsqu'une clé spécifique dans le stockage local est mise à jour.
Donnez à SignalRamp une chance.
Vous pouvez attacher n'importe lequel des noms de classes pouvant être lié à des éléments pour synchroniser le mousedown correspondant, mouseup, hover (mouseover, mouseout) ou cliquez sur les événements dans l'interface utilisateur.