2012-03-27 16 views
6

Sto cercando di ottenere ciò che è stato spiegato here.Indicatore di occupato del browser durante il caricamento dei dati

Sto provando a caricare alcuni dati dal server al lato client utilizzando tag di script dinamici. (Io creo un tag script, setto il suo src al mio controller JSON e lo aggiungo al mio tag head o body).

lo script viene caricato correttamente con i dati restituiti dal server. Ma durante il caricamento dello script, il browser non visualizza l'indicatore di occupato (provato con Chrome/Firefox) (mentre secondo this reference (pagina 35), questo dovrebbe essere il comportamento predefinito).

Inoltre ho aggiunto il metodo Sleep al mio metodo lato server per simulare un processo di lunga durata, per visualizzare l'indicatore di occupato. Ma ancora senza fortuna.

P.s Quando utilizzo IFrame anziché script, tutto funziona correttamente e l'indicatore di occupato viene visualizzato dal browser. ma non farlo con tag script.

+0

È possibile utilizzare qualcosa come il plug-in dell'interfaccia utente di blocco? Funziona abbastanza bene, se sei già investito in jQuery (non così tanto, altrimenti). –

+0

L'interfaccia utente del blocco cambia semplicemente l'icona del cursore. quello che voglio veramente è vedere l'indicatore rotante sulla scheda. Sono confuso da come Facebook lo fa. usa anche gli IFrames? – Kamyar

risposta

2

In breve:

facebook fanno uso di iframe durante il caricamento dei dati di pagina, e non c'è nulla di magico indicatore del browser di caricamento.


Maggiori dettagli:

quando si passa da una pagina all'altra, FB inietta un iframe nascosto in DOM e il suo attributo src verranno impostati alla pagina che avete chiesto (con un paio di parametri indicando che si tratta di una richiesta simile a Ajax e non di un aggiornamento completo della pagina). Quindi la pagina viene effettivamente caricata nell'iframe nascosto. Tuttavia il contenuto non è HTML, e invece è un insieme di tag javascript che consumano alcuni oggetti JSON contenenti HTML e altri dati necessari per il rendering della pagina.
Di seguito viene fornita dalla console Firebug durante il caricamento di una pagina quando l'iframe viene iniettato su DOM. puoi controllare che dopo il caricamento della pagina, l'iframe sia stato rimosso.

facebook hidden iframe

per avere un'idea di come funzionano questi script per caricare i dati della pagina, è possibile leggere la BigPipe Technique. In poche parole, ha interrotto la costruzione di ogni pagina in un paio di cosiddetti pagelets, che hanno il proprio set di risorse CSS e JS, quindi le risorse di ogni pagelet possono essere recuperate dal server parallelo ad altre pagelet. big_pipe riuscirà a mettere ogni pagelet nel suo contenitore dopo che tutte le sue risorse saranno disponibili.

+0

Il loro approccio non funziona su tutti i browser. In particolare, Safari e gli IE successivi non rispondono ai carichi iframe in termini di interfaccia utente del browser. – Dtipson

1

Il caricamento dei componenti in modo asincrono sulla pagina Web non attiva l'icona acquisti del browser nei browser non IE. Anche lo stesso per Facebook. Prova a leggere qualche post o scrivere qualcosa sul muro, entrambe queste azioni non mostreranno l'icona degli acquisti del browser nei browser non-IE.

+1

Vai a 'http: // developers.facebook.com/docs/reference/plugins/comments /' nella sezione demo, clicca 'Visualizza NUMBER_OF_COMMENTS more' dove' NUMBER_OF_COMMENTS' sta bene, il numero di commenti. Vedi l'indicatore del browser. passa a occupato senza aggiornare l'intera pagina. Sospetto che stiano usando iframe. – Kamyar

+0

Mostra icona occupata per il caricamento delle immagini del profilo ma non per l'intero dato risultante tramite AJAX – Epuri

+0

@Epuri quando si naviga tra le pagine di Facebook, non si verifica una ricarica completa della pagina. Il contenuto della pagina precedente verrà rimosso e verranno recuperati nuovi contenuti e l'indicatore di caricamento del browser farà sì che tutti pensino che si tratta di una pagina di ricarica completa, tuttavia non lo è. Puoi verificarlo modificando qualcosa nell'intestazione (usando gli strumenti di sviluppo del browser) e quindi navigando verso un'altra pagina. I cambiamenti rimarranno. –

Problemi correlati