Esistono librerie JavaScript open source che indirizzano più schede del browser e lo stato del client per i browser più recenti? [chiuso]


11

Ci sono alcune nuove funzionalità HTML5 che sono diventate browser recenti che consentono di condividere lo stato tra schede, finestre del browser, finestre dello stesso dominio, ecc. Quindi è probabilmente diventato un po 'più facile scrivere un'applicazione Web che mantiene molto stato sul client e gestisce anche lo stato in modo intelligente tra le schede e / o le finestre.

Attualmente ci sono librerie come Backbone.js che possono aiutare a gestire lo stato in una singola scheda o in una singola finestra. Esiste ancora qualcosa che possa aiutare con più schede (o finestre) a gestire lo stato globale, lo stato specifico delle schede e gli eventi cross-tab senza fare affidamento sul server per sincronizzarli tutti?


2
Alcune app Web (ad esempio Trello) lo stanno aggirando semplicemente usando WebSocket per sincronizzare tutti i client, sia nello stesso browser o meno. Ma potrebbe essere utile. Se stessi scrivendo una libreria come questa, farei un sottile strato su un polyfill per SharedWorkers, poiché SharedWorkers fa molto di ciò che ti serve qui, ma non è ancora ben supportato. Un trucco per farlo funzionare sono gli eventi localStorage, che si attivano anche quando le schede sono state aperte in modo indipendente.
mahemoff,

1
Il mio insegnante di college me lo ha insegnato HTTP is great (and beutiful) because it is stateless. Da quando mi sono unito all'industria, sono alla ricerca di questo compito ma non riesco a trovarlo. Tutti parlano solo di mantenere gli stati che vedi!
Dipan Mehta,

@DipanMehta: se guardi la RFC2616, non sono sicuro che saresti d'accordo con il tuo insegnante sulla parte "bellezza" :) Anche se ti darei che l'idea "puramente apolide" è davvero fantastica e trovo problematica che lo stiamo massacrando ...
haylem

Stateless e applicazione web non vanno così bene insieme. Piccole cose come essere loggato portano lo stato. Fantastico se stai solo offrendo file abbastanza piccoli a chiunque lo richieda, immagino.
ps

Ho scritto una piccola libreria per comunicare tra tutte le schede aperte del tuo sito Web utilizzando un trucco HTML5.
catamphetamine,

Risposte:


3

Risposta breve:

Non puoi veramente passare le informazioni sullo stato da una scheda all'altra ...

Risposta lunga:

Non è possibile passare realmente le informazioni sullo stato da una scheda all'altra, poiché si tratterebbe di una violazione molto grave del sandboxing e della sicurezza.

Tuttavia, è possibile passare indirettamente lo stato tra due schede mediante:

Un'altra opzione sarebbe semplicemente quella di comunicare tramite i cookie per passare le informazioni tra 2 schede, ma molto probabilmente ciò causerebbe problemi, sarebbe altamente dipendente dal browser e richiederebbe il ricaricamento delle pagine (e ad essere sincero non l'ho mai provato e ci ho pensato, ma altri hanno fatto esso ) .

Quindi, poiché le estensioni del browser sono ovviamente un percorso abbastanza limitante, dovresti seguire la strada delle comunicazioni client-server e sviluppare un sistema per consentire ai client di pubblicare eventi su un server, che quindi li rispedisce (o qualsiasi altro tipo di trasmissione) ad altri clienti tramite un protocollo di comunicazione di vostra scelta.


Aggiornamento 1: come qualcuno ha menzionato in un commento prima di rimuoverlo (non posso dare credito in quanto non viene visualizzato nella posta in arrivo, mi dispiace)

HTML5 introduce l' window.postMessageAPI.

Per un esempio funzionante, vedere il post sul blog di John Resig su Cross-Window Messaging . E molto interessante, se guardi i commenti su questo post noterai che qualcuno chiamato Malte menziona una libreria che ha scritto per usare window.postMessagesu browser moderni o una versione basata su cookie su browser più vecchi.

Leggi questi per maggiori dettagli ed esempi:

Aggiornamento 2:

Tieni presente che, come 2012-03-04, la specifica HTML5 è ancora una bozza, quindi alcune funzionalità potrebbero essere rimosse . Quindi usa con cura ...


A quanto pare, mi sbaglio, poiché HTML5 introduce l'API window.postMessage, in effetti.
Hayylem

Inoltre, se leggi il post sul blog di John Resig su Cross-Window Messaging e i commenti, noterai che qualcuno chiamato Malte menziona una [libreria] [3] che ha scritto per usarlo su browser moderni o una versione basata su cookie per browser meno recenti, quindi la mia cosa sui cookie non era così folle.
Hayylem

3

Recentemente ho scoperto Intercom , che utilizza l'archiviazione locale per implementare la trasmissione di messaggi tra Windows. La memoria locale genera un evento ( onstorage) quando i dati cambiano, quindi non è necessario il polling. L'interfono consente a tutte le pagine di un dominio di comunicare, indipendentemente da come sono state aperte.


1

Se le finestre (pagine) appartengono allo stesso dominio (origine), localStoragepossono essere utilizzate per condividere dati e trasmettere messaggi. Una cosa da considerare è che ogni finestra (pagina) del browser funziona in un thread separato. Quindi, se stiamo parlando di comunicazione cross-window, stiamo anche parlando di multithreading.

Dovresti anche considerare alcuni localStorageproblemi con IE:

  • Ho eseguito alcuni test per localStorage in IE8. Dopo diverse migliaia di modifiche a localStorage, le finestre della stessa origine smettono di ricevere eventi di "archiviazione". Ancora di più, quindi si tenta di leggere dallo stesso elemento localStorage, i valori possono differire in finestre diverse. Quindi, direi che IE8 non supporta localStorage

  • IE9 e IE10 chiamano il gestore eventi 'storage' anche se localStorage è cambiato da questa finestra ( questo è contro le specifiche ).

  • Esistono anche problemi noti con IE11 .

Di recente ho pubblicato la libreria di comunicazione interwindow (tutte le funzionalità sono descritte in readme). Fornisce condivisione di dati thread-safe, trasmissione di eventi. Risolve anche alcuni problemi di IE (IE8 sicuramente non è supportato, il bug IE11 con iframe all'interno di un genitore di origine diversa può essere risolto solo con il fissaggio IE - in attesa dell'aggiornamento di IE11).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.