Pergunta

O Google Chrome não se comportam da mesma forma que outros navegadores quando se deparam com esta pepita:

<?php
while (true) {
    echo "<script type='text/javascript'>\n";
    echo "alert('hello');\n";
    echo "</script>";
    flush();

    sleep(5);
}
?>

Parece que ele está aguardando a conexão para terminar antes de fazer qualquer coisa.

Além de polling como posso fazer uma coisa semelhante no Google Chrome?

Foi útil?

Solução

Alguns navegadores requerem um certo número de bytes a serem baixados antes de processar dados disponíveis. Lembro-me da última vez que eu tentei fazer o que você está fazendo Acabei por ter de despejar algo como 300 lugares para garantir que o navegador se preocupar com isso.

Outras dicas

Eu tive um problema semelhante a este, e resolveu-lo adicionando uma tag HTML (no meu caso
) antes de cada flush.

Meu palpite seria que o Chrome espera por um elemento que está sendo exibido para fechar antes de disparar um re-render. Isso é apenas um palpite embora.

Ele não parecem exigir de 1024 bytes -. Eu acho que eu teria um pouco menos de 512 bytes quando se trabalhou

Eu gostaria de ter acesso ao Chrome no momento para testar algumas idéias. Você já tentou adicionar algum HTML após </script> e ver se ele processa de forma incremental? Imagino que seria, e se assim for isso seria uma prova de que o Chrome não deseja executar javascript em elementos <script> enquanto a página está carregando. Claro, tornando a marcação pode desencadear seus scripts para ser executado. Se não, você pode tentar incluindo o javascript como arquivos externos e ver se isso afeta o tempo de execução.

Eu acho que os navegadores geralmente têm alguma margem de manobra de acordo com a especificação de quando eles começam a execução de javascript, especialmente quando a página é carregada. Pode não ser possível fazer isso de uma forma totalmente cross-browser, sem votação.

Você falou com os desenvolvedores do Chrome? Você abriu um bug sobre isso? IMHO a melhor solução é fazer comportam Chrome como outros navegadores fazer, ao invés de ter uma solução para isso.

Ok, na verdade, você provavelmente vai precisar de uma solução de curto prazo. Mas imagine um mundo em que cada navegador tem um comportamento diferente em cada aspecto, digamos, HTTP, HTML, manipulação de CSS ... não seria um lugar agradável!

Corrente está funcionando. A resposta de eyelidlessness é a solução.

imprimir "2048 pontos [BR> \ n";

O [= <

BTW olhar para o user-agent. Safari precisa de muito bytes também. Eu acho 1024. Firefox precisa não tanto bytes.

<?php
$i = 0;
while (true) {
    if($i == 0) {
        echo "<html><body>";
    }
    echo "<script type='text/javascript'>\n";
        echo "alert('hello');\n";
    echo "</script>";
    if($i == 0 ) {
        $padstr = str_pad("",2048,"&nbsp;");
        echo $padstr;
        echo "</body></html>";
    }
    flush();

    sleep(5);
    $i = $i + 1;
}
?>

Para punho horário de envio, pelo menos, 2048 bytes de dados. em seguida, ele vai funcionar bem. E certifique-se de manter tag script em uma marca corpo. O estranho é, no meu caso, se eu adicionar 1024 bytes funcionou. Espero que isso ajude você

O programa acima está funcionando bem no Google Chrome.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top