Frage

Google Chrome verhält sich nicht das gleiche wie andere Browser, wenn dieses Nugget Problem aufgetreten ist:

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

    sleep(5);
}
?>

Es scheint, dass es wartet auf die Verbindung vor beenden etwas zu tun.

Anders als Polling, wie kann ich eine ähnliche Sache in Google Chrome?

War es hilfreich?

Lösung

Einige Browser benötigen eine bestimmte Anzahl von Bytes vor dem Rendern verfügbare Daten heruntergeladen werden. Ich erinnere mich an das letzte Mal, dass ich versucht zu tun, was du tust, ich am Ende mit etwas wie 300 Räume Dump der Browser mit ihm stören würde sicher sein.

Andere Tipps

Ich hatte ein ähnliches Problem dazu und löse es, indem einen HTML-Tag hinzugefügt (in meinem Fall
) vor jeder Spülung.

Meine Vermutung wäre, dass Chrome für ein Element wartet , die angezeigt wird, zu schließen, bevor das Auslösen einer Wieder machen. Das ist nur eine Vermutung aber.

Es schien nicht 1024 Byte erfordern. - Ich glaube, ich 512 Bytes knapp gehabt hätte, wenn es funktioniert

Ich wünschte, ich Zugriff auf Chrome zur Zeit einige Ideen zu testen, hatte. Haben Sie versucht, einige HTML nach </script> Hinzufügen und zu sehen, wenn es schrittweise macht? Ich stelle mir vor, es würde, und wenn ja, dass der Nachweis sein würde, dass Chrome nicht Javascript in <script> Elemente laufen will, während die Seite geladen ist. auslösen Ihre Skripte auszuführen Natürlich könnte das Markup-Rendering. Wenn nicht, könnten Sie die Javascript als externe Dateien versuchen, einschließlich und sehen, ob das Ausführungszeit auswirken.

Ich denke Browser im Allgemeinen einen gewissen Spielraum haben nach der Spezifikation, wenn sie in Javascript beginnen Ausführung, vor allem, wie die Seite geladen wird. Es ist vielleicht nicht möglich sein, dies zu tun in eine vollständig Cross-Browser-Art und Weise ohne Polling.

Haben Sie mit Chrome-Entwickler sprechen? Haben Sie einen Fehler über das öffnen? IMHO die beste Lösung ist, machen Chrome verhalten sich wie andere Browser tun, anstatt eine Lösung für sie ist.

Okay, Sie tatsächlich wahrscheinlich brauchen eine kurzfristige Abhilfe. Aber stellen Sie sich eine Welt, in der jeder Browser in jedem Aspekt verhält sich anders, sagen HTTP, HTML, CSS Handhabung ... es wäre kein angenehmer Ort sein!

Strom funktioniert. Die Antwort von eyelidlessness ist die Lösung.

print "2048 Punkte [BR> \ n";

Die [= <

BTW Blick auf den User-Agent. Safari braucht zu viel Bytes. Ich denke, 1024. Firefox braucht nicht so viel 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;
}
?>

Für erstes Mal mindestens 2048 Bytes von Daten senden. dann wird es gut funktionieren. Und stellen Sie sicher, dass Script-Tag in einem Body-Tag zu halten. Das Merkwürdige ist, in meinem Fall, wenn ich 1024 Bytes hinzufügen, es funktionierte. Hoffe, das hilft Ihnen,

Das obige Programm arbeitet in Google Chrome in Ordnung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top