Google Chrome не ведет себя так же, как другие браузеры, когда сталкивается с этим саморозом:
<?php while (true) { echo "<script type='text/javascript'>\n"; echo "alert('hello');\n"; echo "</script>"; flush(); sleep(5); } ?>
Кажется, что он ждет завершения соединения, прежде чем что-либо предпринять.
Помимо опроса, как я могу сделать подобное в Google Chrome?
Некоторым браузерам требуется определенное количество байтов для загрузки до предоставления доступных данных. Я помню, как в прошлый раз, когда я пытался делать то, что вы делаете, мне пришлось сбросить что-то вроде 300 пробелов, чтобы убедиться, что браузер потрудился бы с этим.
У меня была аналогичная проблема, и я решил ее, добавив тег HTML (в моем случае <br />) перед каждым флешем.
Я предполагаю, что Chrome ждет, пока элемент, который отображается, закрывается, прежде чем запускать повторную визуализацию. Впрочем, это только предположение.
Кажется, он не требует 1024 байта – я думаю, что у меня было бы чуть меньше 512 байт, когда он сработал.
Хотел бы я иметь доступ к Chrome на данный момент, чтобы проверить некоторые идеи. Вы пробовали добавить HTML после </script>
и посмотреть, будет ли он инкрементно отображаться? Я предполагаю, что это было бы, и если бы это было доказательством того, что Chrome не хочет запускать javascript в элементах <script>
во время загрузки страницы. Конечно, рендеринг разметки может привести к запуску ваших скриптов. Если нет, вы можете попробовать включить javascript в качестве внешних файлов и посмотреть, влияет ли это на время выполнения.
Я думаю, что браузеры обычно имеют некоторую свободу действий в соответствии со спецификацией, когда они начинают выполнять javascript, особенно при загрузке страницы. Возможно, это невозможно будет сделать полностью без браузера без опроса.
Вы говорили с разработчиками Chrome? Вы открыли ошибку об этом? IMHO лучшим решением является заставить Chrome вести себя как другие браузеры, а не обходные пути для него.
Хорошо, на самом деле вам, вероятно, понадобится краткосрочное решение. Но представьте себе мир, в котором каждый браузер ведет себя по-разному в каждом аспекте, скажем, HTTP, HTML, обработка CSS … это не будет приятным местом!
Поток работает. Решением от вечности является решение.
print "2048 точек [BR> \ n";
[= <
BTW посмотрите на пользователя-агента. Сафари тоже много байтов. Я думаю, 1024. В Firefox не так много байтов.
<?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," "); echo $padstr; echo "</body></html>"; } flush(); sleep(5); $i = $i + 1; } ?>
За первое время отправьте не менее 2048 байтов данных. то он будет работать нормально. И обязательно сохраните тег script в теге body. Странная вещь, в моем случае, если я добавлю 1024 байта, она сработала. Надеюсь, это поможет вам
Вышеупомянутая программа отлично работает в Google Chrome.