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

11

Ci sono alcune nuove funzionalità HTML5 che sono entrate nei browser recenti che consentono lo stato di condivisione tra le schede, le finestre del browser, le stesse finestre del dominio, ecc. Quindi è probabilmente diventato un po 'più facile scrivere un'applicazione web che tiene un sacco di stato sul client e gestisce anche lo stato in modo intelligente tra schede e / o finestre.

Esistono attualmente librerie come Backbone.js che possono aiutare a gestire lo stato in una singola scheda o in una singola finestra. C'è ancora qualcosa che aiuta con più schede (o finestre) che gestiscono lo stato globale, lo stato della scheda specifica e gli eventi cross-tab senza fare affidamento sul server per sincronizzarli tutti?

    
posta psr 10.02.2012 - 20:39
fonte

3 risposte

3

Risposta breve:

Non puoi veramente passare le informazioni di stato da una scheda a un'altra ...

Risposta lunga:

Non puoi veramente passare le informazioni di stato da una scheda all'altra, in quanto si tratta di una violazione molto grave di sandboxing e sicurezza.

Puoi, tuttavia, indirettamente passare lo stato tra due schede tramite:

Un'altra opzione sarebbe semplicemente comunicare via cookie per passare le informazioni tra 2 schede, ma questo molto probabilmente causerebbe problemi, sarebbe altamente dipendente dal browser e richiederebbe ricariche di pagina (e ad essere onesti 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 che permetta ai clienti di pubblicare eventi su un server, che poi li rimpiazza (o qualsiasi altro tipo) di trasmissione) ad altri client tramite un protocollo di comunicazione di tua scelta.

Aggiornamento 1: Come qualcuno ha menzionato in un commento prima di rimuoverlo (non può dare credito in quanto non viene visualizzato nella Posta in arrivo, mi dispiace)

HTML5 introduce l'API window.postMessage .

Per un esempio funzionante, vedi il post sul blog di John Resig su Cross-Window Messaging . E molto interessante, se guardi i commenti su questo post noterai qualcuno chiamato Malte che cita un libreria hanno scritto per utilizzare window.postMessage sui browser moderni o una versione basata su cookie sui browser meno recenti.

Leggi questi per maggiori dettagli ed esempi:

Aggiornamento 2:

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

    
risposta data 04.03.2012 - 00:12
fonte
3

Recentemente ho scoperto Intercom , che utilizza l'archiviazione locale per implementare i messaggi di trasmissione tra le finestre. L'archiviazione locale genera un evento ( onstorage ) quando i dati cambiano, quindi non è necessario il polling. Intercom consente a tutte le pagine di un dominio di comunicare, indipendentemente dal modo in cui sono state aperte.

    
risposta data 26.07.2014 - 02:25
fonte
1

Se le tue finestre (pagine) provengono dallo stesso dominio (origine), localStorage può essere utilizzato per condividere dati e trasmettere messaggi. Una cosa che dovresti considerare è che ogni finestra del browser (pagina) funziona in un thread separato. Quindi, se stiamo parlando di comunicazione cross-window, stiamo anche parlando di multithreading.

Dovresti anche prendere in considerazione alcuni problemi di localStorage con IE:

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

  • IE9 e IE10 chiamano il gestore di eventi 'storage' anche se localStorage viene modificato da questa finestra ( questo è contro specifica ).

  • Ci sono anche noti problemi con IE11 .

Recentemente 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 di IE11 con iframe all'interno di genitore di origine diversa può essere risolto solo da IE fixing - in attesa dell'aggiornamento di IE11).

    
risposta data 11.01.2015 - 17:26
fonte

Leggi altre domande sui tag