Gibt es Open-Source-JavaScript-Bibliotheken, die mehrere Browser-Registerkarten und den Client-Status für neuere Browser adressieren? [geschlossen]

11

Es gibt einige neue HTML5-Funktionen, die es in die neuesten Browser geschafft haben und die es ermöglichen, den Status zwischen Registerkarten, Browserfenstern, denselben Domänenfenstern usw. zu teilen. Daher ist es wahrscheinlich etwas einfacher geworden, eine Webanwendung zu schreiben, die viel Status auf dem Bildschirm behält Client und verwaltet auch den Status intelligent zwischen Registerkarten und / oder Fenstern.

Derzeit gibt es Bibliotheken wie Backbone.js, mit denen der Status in einer einzelnen Registerkarte oder einem einzelnen Fenster verwaltet werden kann. Gibt es noch etwas, das bei der Verwaltung des globalen Status, des tabulatorspezifischen Status und der tabellenübergreifenden Ereignisse mit mehreren Registerkarten (oder Fenstern) hilft, ohne dass der Server sie alle synchronisieren muss?

psr
quelle
2
Einige Web-Apps (z. B. Trello) umgehen dies, indem sie nur WebSockets verwenden, um alle Clients zu synchronisieren, ob im selben Browser oder nicht. Aber es könnte nützlich sein. Wenn ich eine Bibliothek wie diese schreiben würde, würde ich eine dünne Schicht über einer Polyfüllung für SharedWorkers erstellen, da SharedWorkers viel von dem tut, was Sie hier benötigen, aber noch nicht gut unterstützt wird. Ein Hack, um dies zum Laufen zu bringen, sind localStorage-Ereignisse, die auch dann ausgelöst werden, wenn die Registerkarten unabhängig voneinander geöffnet wurden.
Mahemoff
1
Mein Hochschullehrer hat mir das beigebracht HTTP is great (and beutiful) because it is stateless. Seit ich in der Industrie bin, bin ich auf der Suche nach dieser Pflicht, kann sie aber nicht ganz finden. Alle reden nur davon, die Zustände zu behalten, die Sie sehen!
Dipan Mehta
@ DipanMehta: Wenn Sie sich den RFC2616 ansehen, bin ich mir nicht sicher, ob Sie Ihrem Lehrer in Bezug auf den Teil "Schönheit" zustimmen würden :) Obwohl ich Ihnen sagen würde, dass die Idee "rein staatenlos" in der Tat großartig ist und ich problematisch finde dass wir es
schlachten
Staatenlose und Webanwendungen passen nicht so gut zusammen. Kleinigkeiten wie das Anmelden im Carry-Status. Großartig, wenn Sie nur relativ kleine Dateien an jemanden senden, der nach ihnen fragt, denke ich.
Psr
Ich habe eine winzige Bibliothek geschrieben , um mit einem HTML5-Trick zwischen allen geöffneten Registerkarten Ihrer Website zu kommunizieren.
Katamphetamin

Antworten:

3

Kurze Antwort:

Sie können Statusinformationen nicht wirklich von einer Registerkarte an eine andere weitergeben ...

Lange Antwort:

Sie können Statusinformationen nicht wirklich von einer Registerkarte auf eine andere übertragen, da dies eine sehr schwerwiegende Verletzung von Sandboxing und Sicherheit darstellen würde.

Sie können den Status jedoch indirekt zwischen zwei Registerkarten übertragen, indem Sie:

Eine andere Möglichkeit wäre, einfach über Cookies zu kommunizieren, um Informationen zwischen zwei Registerkarten zu übertragen. Dies würde jedoch höchstwahrscheinlich Probleme verursachen, stark vom Browser abhängig sein und das Neuladen von Seiten erfordern (und um ehrlich zu sein, habe ich das noch nie versucht und nur daran gedacht). aber andere haben getan es ) .

Da Browsererweiterungen offensichtlich ein ziemlich einschränkender Pfad sind, sollten Sie den Weg der Client-Server-Kommunikation gehen und ein System entwickeln, mit dem Clients Ereignisse auf einem Server veröffentlichen und diese dann erneut versenden können (oder jede andere Art von Broadcast). an andere Kunden über ein Kommunikationsprotokoll Ihrer Wahl.


Update 1: Wie jemand in einem Kommentar erwähnt hat, bevor er entfernt wurde (kann keine Gutschrift geben, da er nicht im Posteingang angezeigt wird, sorry)

HTML5 führt die window.postMessageAPI ein.

Ein funktionierendes Beispiel finden Sie in John Resigs Blog-Post zu Cross-Window Messaging . Und sehr interessant, wenn Sie sich die Kommentare zu diesem Beitrag ansehen, werden Sie feststellen, dass jemand namens Malte eine Bibliothek erwähnt , die er window.postMessagefür moderne Browser geschrieben hat, oder eine Cookie-basierte Version für ältere Browser.

Lesen Sie diese für weitere Details und Beispiele:

Update 2:

Beachten Sie, dass die HTML5-Spezifikation als 04.03.2012 noch ein Entwurf ist, sodass einige Funktionen entfernt werden können . Also vorsichtig verwenden ...

Haylem
quelle
Ich liege anscheinend falsch, da HTML5 tatsächlich die window.postMessage-API einführt.
Haylem
Wenn Sie John Resigs Blog-Post über Cross-Window Messaging und die Kommentare lesen , werden Sie feststellen, dass jemand namens Malte eine [Bibliothek] [3] erwähnt, die er geschrieben hat, um dies in modernen Browsern zu verwenden, oder eine Cookie-basierte Version für ältere Browser, also war mein Cookie-Ding nicht so verrückt.
Haylem
3

Ich habe kürzlich Intercom entdeckt , das lokalen Speicher verwendet, um Broadcast-Nachrichten zwischen Windows zu implementieren. Der lokale Speicher löst ein Ereignis ( onstorage) aus, wenn sich Daten ändern, sodass keine Abfrage erforderlich ist. Mit Intercom können alle Seiten einer Domain kommunizieren, unabhängig davon, wie sie geöffnet wurden.

josh3736
quelle
1

Wenn Ihre Fenster (Seiten) aus derselben Domäne (Herkunft) stammen, localStoragekönnen Sie Daten freigeben und Nachrichten senden. Eine Sache, die Sie berücksichtigen sollten, ist, dass jedes Browserfenster (Seite) in einem separaten Thread funktioniert. Wenn wir also über fensterübergreifende Kommunikation sprechen, sprechen wir auch über Multithreading.

Sie sollten auch einige localStorageProbleme mit dem IE berücksichtigen :

  • Ich habe einige Tests für localStorage in IE8 durchgeführt. Nach mehreren tausend Änderungen an localStorage empfangen Fenster desselben Ursprungs keine Speicherereignisse mehr. Wenn Sie dann versuchen, aus demselben localStorage-Element zu lesen, können die Werte in verschiedenen Fenstern unterschiedlich sein. Daher würde ich sagen, dass IE8 localStorage nicht unterstützt

  • IE9 und IE10 rufen den Ereignishandler "Speicher" auf, auch wenn localStorage in diesem Fenster geändert wird ( dies widerspricht der Spezifikation ).

  • Es sind auch Probleme mit IE11 bekannt .

Ich habe kürzlich die Interwindow-Kommunikationsbibliothek veröffentlicht (alle Funktionen sind in der Readme- Datei beschrieben). Es bietet threadsicheren Datenaustausch und Ereignisübertragung. Es löst auch einige IE-Probleme (IE8 wird definitiv nicht unterstützt, IE11-Fehler mit Iframe in einem anderen übergeordneten Ursprung können möglicherweise nur durch IE-Korrektur behoben werden - Warten auf IE11-Update).

Eugene Khudoy
quelle