Google chrome在遇到此块时的行为与其他浏览器不同:
<?php
while (true) {
echo "<script type='text/javascript'>'n";
echo "alert('hello');'n";
echo "</script>";
flush();
sleep(5);
}
?>
似乎在执行任何操作之前正在等待连接终止。
除了轮询之外,我如何在谷歌浏览器中做类似的事情?
我有一个类似的问题,并通过在每次刷新之前添加一个 HTML 标签(在我的例子中为
)来解决它。
我的猜测是,Chrome 在触发重新渲染之前等待正在显示的元素关闭。 不过这只是一个猜测。
它似乎不需要 1024 字节 - 我想当它工作时我会有不到 512 字节。
某些浏览器要求在呈现可用数据之前下载一定数量的字节。我记得上次我尝试做你正在做的事情时,我最终不得不转储大约 300 个空格以确保浏览器会打扰它。
我现在可以访问Chrome来测试一些想法。您是否尝试过在</script>
后添加一些 HTML 并查看它是否以增量方式呈现? 我想它会,如果是这样,那将证明Chrome不想在页面加载时<script>
元素中运行javascript。 当然,呈现标记可能会触发脚本运行。 如果没有,您可以尝试将javascript作为外部文件包含在内,看看这是否会影响执行时间。
我认为浏览器在开始执行javascript时通常会根据规范有一些回旋余地,尤其是在页面加载时。 如果不进行轮询,则可能无法以完全跨浏览器的方式执行此操作。
您是否与 Chrome 开发人员进行了交谈?您是否打开了有关此的错误?恕我直言,最好的解决方案是让 Chrome 像其他浏览器一样运行,而不是有解决方法。
好的,实际上您可能需要一个短期的解决方法。但是想象一下这样一个世界,在这个世界中,每个浏览器在每个方面的行为都不同,比如HTTP,HTML,CSS处理......这不会是一个愉快的地方!
流正在工作。无眼的答案就是解决方案。
打印"2048 点[BR>'";
的 [ = <</p>
顺便说一句,看看用户代理。Safari也需要很多字节。我认为是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 字节的数据。 然后它会正常工作。并确保将脚本标签保留在正文标签中。奇怪的是,就我而言,如果我添加 1024 字节,它就可以工作。希望这对你有帮助
上面的程序在谷歌浏览器中运行良好。