Pare o navegador “throbber da desgraça” durante o carregamento cometa / servidor de envio iframe

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

Pergunta

Ao usar Comet, ou Ajax longo técnicas Pull - um iframe é normalmente usado. E enquanto isso iframe está aguardando a longa ligação ao próximo, o navegador está girando sua throbber (o progresso / indicador de carga).

Alguns sites, por exemplo etherpad.com, conseguiu fazê-lo parar.

Como é que eles fazem isso?

Foi útil?

Solução

Depois de cavar por um dia e uma noite nas vísceras de internets, aqui está o que eu vim com:

  1. eventos enviados pelo servidor - Muito legal, atualmente só funciona no Opera, mas pode ser parte de HTML5 e outros navegadores podem apoiá-lo em algum momento. Adiciona um novo elemento tag com o tipo de conteúdo de "application / x-dom-evento-stream", que permite que o Servidor para eventos de incêndio na DOM Cliente . E não deve mostrar um indicador de progresso, tanto quanto eu entendo. É também um projecto de trabalho de uma norma, e não um hack como a coisa toda iframe cometa.

  2. XMLHttpRequest - no Firefox e Safari, mas não no IE, ele pode ser usado para o carregamento da página longa-pull que permite lidar com fragmentos como eles aparecem em cada evento ReadyStateChange. não vai mostrar o progresso indicador *. - veja comentário abaixo

  3. ActiveXObject ( "htmlfile") - pode ser usado no IE para criar uma página / janela que está fora do escopo janela atual. Isso faz com que o indicador de progresso ir embora! A carregado iframe estará em um navegador invisível.

Mais sobre enviados pelo servidor-eventos:

E mais sobre as outras duas técnicas (também explica melhor o problema): http://meteorserver.org/browser-techniques/

Ainda mais detalhadas sobre cada técnica, e mais técnicas:

Outras dicas

Para mim, a execução de um setTimeout sobre o pedido ajax resolvido tudo. Quando eu corri o pedido de document.ready, eu tenho o "throbber da desgraça". Mas com setTimeout isso não acontece. (Essa correção também funciona para Chrome).

Apenas no caso que você pode precisar de alguns exemplos, esse cara fez dar uma solução para resolver o problema firefox. http://www.shanison.com/?p=237

Eu tive o mesmo problema, ea solução foi usar Ajax em vez de iframe escondido. Então, ao invés de gerar algum lugar iframe na página:

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

Eu costumava chamada ajax jQuery para conteúdo de carga de iframe em algum div:

$('#chat #chat_comet').load('chatFrame?id=$userId');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top