Fermare il browser “throbber of Doom” durante il caricamento della cometa / server push iframe

StackOverflow https://stackoverflow.com/questions/1064782

Domanda

Quando si utilizza Comet, o Ajax tecniche di lungo sorso - un iframe è di solito utilizzato. E mentre questo iframe è in attesa del tempo di connessione per chiudere, il browser è in rotazione il suo throbber (il / indicatore di avanzamento del caricamento).

Alcuni siti web, ad esempio etherpad.com, sono riusciti a farlo smettere.

Come lo fanno?

È stato utile?

Soluzione

Dopo aver scavato per un giorno e una notte nelle budella delle internet, qui è quello che mi si avvicinò con:

  1. eventi server-inviato - Very cool, attualmente funziona solo in Opera, ma possono essere parte di HTML5 e altri browser possono supportare qualche volta. Aggiunge un nuovo tag elemento con tipo di contenuto "application / x-dom-evento-stream", che permette al Server per generare gli eventi nel Client DOM . E non dovrebbe mostrare un indicatore di avanzamento, per quanto ho capito. E 'anche una bozza di lavoro di uno standard, e non un hack come tutta iframe cosa cometa.

  2. XMLHttpRequest - in Firefox e Safari, ma non in IE, può essere utilizzato per lungo tiro caricamento della pagina che consente di gestire i frammenti come appaiono su ogni evento ReadyStateChange. non mostrerà indicatore di avanzamento *. - vedi commento qui sotto

  3. ActiveXObject ( "htmlfile") - può essere utilizzato in Internet Explorer per creare una pagina / finestra che è al di fuori del campo di applicazione finestra corrente. Questo rende l'indicatore di avanzamento andare via! L'iframe carica sarà in un browser invisibile.

Ulteriori informazioni sui server inviate-eventi:

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

Ancora più in profondità su ogni tecnica, e più tecniche:

Altri suggerimenti

Per quanto mi riguarda, l'esecuzione di un setTimeout sulla richiesta AJAX risolto tutto. Quando ho eseguito la richiesta da document.ready, ho avuto la "throbber di sventura". Ma con setTimeout non accade. (Questa correzione funziona anche per Chrome).

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

Ho avuto lo stesso problema, e la soluzione era quella di utilizzare Ajax invece di iframe nascosto. 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 jQuery chiamata AJAX a caricare i contenuti iframe in qualche div:

$('#chat #chat_comet').load('chatFrame?id=$userId');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top