2009-06-30 4 views
32

Quando si usano le tecniche Comet o Ajax Long Pull, viene solitamente utilizzato un iframe. E mentre quell'iframe attende che la lunga connessione si chiuda, il browser sta girando il suo stroboscopio (l'indicatore di progresso/caricamento).Arresta il browser "throbber of doom" durante il caricamento di ifetame push comet/server

Alcuni siti Web, ad esempio etherpad.com, sono riusciti a fermarlo.

Come fanno?

+0

ci sono molti bar di carico, quale ti riferisci, è specifico del browser o parte del sistema operativo? –

+0

Voglio DISABILITARE la barra di caricamento, quella che vedi nel tuo browser (di solito nell'angolo in alto a destra o nella barra degli indirizzi). – Evgeny

risposta

17

Dopo aver scavato per un giorno e una notte nelle budella delle internet, ecco cosa mi si avvicinò con:

  1. eventi server-inviato - Very cool, attualmente funziona solo in Opera, ma può far parte di HTML5 e altri browser potrebbero supportarlo a volte. Aggiunge un nuovo tag elemento con tipo di contenuto di "application/x-dom-event-stream" che consente al server di attivare eventi nel DOM Client DOM. E non dovrebbe mostrare un indicatore di progresso, per quanto ho capito. È anche una bozza di lavoro di uno standard, e non un hack come l'intera cometa iframe.

  2. XMLHttpRequest: in Firefox e Safari, ma non in IE, può essere utilizzato per il caricamento della pagina a lungo pull che consente di gestire i frammenti come appaiono in ogni evento readyStateChange. Non mostrerà l'indicatore di progresso *. - vedi commento sotto

  3. ActiveXObject ("htmlfile") - può essere utilizzato in IE per creare una pagina/finestra che è al di fuori dell'ambito della finestra corrente. Questo fa svanire l'indicatore di avanzamento! L'iframe caricato si troverà in un browser invisibile.

Ulteriori informazioni su server inviato-eventi:

E di più sulle altre due tecniche (spiega anche meglio il problema): * http://meteorserver.org/browser-techniques/

Ancora più approfondita su ciascuna tecnica e più tecniche:

+12

Quando si utilizza il metodo (2), XHR, deve essere richiamato DOPO il caricamento terminato della pagina. Ad esempio usando setTimeout(). Se inizia prima che la pagina finisca di girare il throbber, allora continuerà a girare mentre carica l'XHR - e un "ESC" può abortirlo, quindi è brutto. – Evgeny

+1

Grazie per quel commento Evgeny. Ho battuto la testa contro la mia pagina per settimane. Aggiunta di un secondo timeout prima del polling è stato risolto il problema di Throbber della mia pagina. – Mnebuerquo

+0

@Evgeny Sfortunatamente la soluzione di timeout non funziona in Chrome, mi dà comunque un indicatore di caricamento (funziona comunque in Firefox). Qualche suggerimento? – Jules

1

Solo nel caso che potrebbe essere necessario qualche esempio, questo ragazzo ha dato una soluzione per risolvere il problema firefox. http://www.shanison.com/?p=237

3

Per me, l'esecuzione di un setTimeout sulla richiesta Ajax ha risolto tutto. Quando ho eseguito la richiesta da document.ready, ho ottenuto il "throbber of doom". Ma con setTimeout non succede. (Questa correzione funziona anche per Chrome).

0

Ho avuto lo stesso problema e la soluzione era utilizzare Ajax invece di iframe nascosti.Così, invece di generare iframe da qualche parte nella pagina:

$("#chat .msg_list").prepend('<iframe id="hidden" src="chatFrame?id=$userId" frameborder="0" height="0" width="100%"></iframe>'); 

ho usato chiamata jquery ajax a caricare i contenuti iframe in qualche div:

$('#chat #chat_comet').load('chatFrame?id=$userId'); 
+0

La risposta accettata spiega già come usare ajax. – Evgeny

+0

Sì, ma non era così ovvio per me alla prima volta così ho scritto una risposta più semplice. –

Problemi correlati