Question

Google Chrome ne se comporte pas de la même manière que les autres navigateurs lorsqu'il rencontre ce nugget:

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

    sleep(5);
}
?>

Il semble attendre la fin de la connexion avant de faire quoi que ce soit.

Autre que l'interrogation, comment puis-je faire la même chose dans Google Chrome?

Était-ce utile?

La solution

Certains navigateurs nécessitent le téléchargement d’un certain nombre d’octets avant de restituer les données disponibles. Je me souviens de la dernière fois que j’ai essayé de faire ce que vous faites, j’ai dû vider quelque chose comme 300 espaces pour être sûr que le navigateur en dérangerait.

Autres conseils

J'ai eu un problème similaire à celui-ci et je l'ai résolu en ajoutant une balise HTML (dans mon cas, < br / >) avant chaque flush.

Je suppose que Chrome attend qu'un élément affiché soit fermé avant de déclencher un nouveau rendu. Ce n'est qu'une hypothèse cependant.

Cela ne semblait pas nécessiter 1024 octets - je pense que j'aurais eu un peu moins de 512 octets quand cela a fonctionné.

Je souhaiterais pouvoir accéder à Chrome pour tester certaines idées. Avez-vous essayé d’ajouter du code HTML après </script> et de voir s’il restitue de manière incrémentielle? J'imagine que ce serait le cas, et si tel était le cas, ce serait la preuve que Chrome ne souhaite pas exécuter JavaScript dans <script> éléments pendant le chargement de la page. Bien entendu, le rendu du balisage peut entraîner l'exécution de vos scripts. Sinon, vous pouvez essayer d'inclure le javascript en tant que fichiers externes et voir si cela a une incidence sur le temps d'exécution.

Je pense que les navigateurs ont généralement une marge de manœuvre en fonction de la spécification lorsqu’ils commencent à exécuter javascript, en particulier lors du chargement de la page. Il est possible que cela ne soit pas possible de manière totalement inter-navigateur sans interrogation.

Avez-vous parlé avec les développeurs Chrome? Avez-vous ouvert un bogue à ce sujet? À mon humble avis, la meilleure solution est de faire en sorte que Chrome se comporte comme les autres navigateurs, plutôt que de chercher une solution de contournement.

D'accord, vous aurez probablement besoin d'une solution de contournement à court terme. Mais imaginez un monde dans lequel chaque navigateur se comporte différemment dans chaque aspect, comme HTTP, HTML, la gestion des CSS ... ce ne serait pas un endroit agréable!

Le flux fonctionne. La solution de paupière est la solution.

imprimer & 2048 points [BR > \ n " ;;

Le [= <

BTW regarde l'agent utilisateur. Safari a également besoin de beaucoup d'octets. Je pense que 1024. Firefox n'a pas besoin d'octets.

<?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;
}
?>

Pour la première fois, envoyez au moins 2048 octets de données. alors cela fonctionnera bien. Et assurez-vous de conserver la balise script dans une balise body. La chose étrange est, dans mon cas, si j'ajoute 1024 octets cela a fonctionné. J'espère que cela vous aide

Le programme ci-dessus fonctionne correctement dans Google Chrome.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top