3

このナゲットに遭遇すると、Google chrome は他のブラウザーと同じように動作しません。

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

    sleep(5);
}
?>

何かをする前に、接続が終了するのを待っているようです。

ポーリング以外に、Google Chrome で同様のことを行うにはどうすればよいですか?

4

6 に答える 6

4

これと同様の問題があり、各フラッシュの前に HTML タグ (私の場合は <br />) を追加して解決しました。

私の推測では、Chromeは再レンダリングをトリガーする前に、表示されている要素が閉じるのを待っていると思います。しかし、それは推測にすぎません。

1024 バイトは必要なかったようです。動作するときは 512 バイト弱だったと思います。

于 2009-09-24T03:10:47.133 に答える
3

一部のブラウザでは、使用可能なデータをレンダリングする前に、特定のバイト数をダウンロードする必要があります。前回あなたがやっていることをやろうとしたとき、ブラウザが気にしないように300スペースのようなものをダンプしなければならなかったのを覚えています。

于 2008-10-26T08:29:28.283 に答える
1

いくつかのアイデアをテストするために、現時点で Chrome にアクセスできればと思います。後で HTML を追加</script>して、それが段階的にレンダリングされるかどうかを確認しましたか? <script>そうなれば、ページの読み込み中に Chrome が要素内で JavaScript を実行したくないという証拠になります。もちろん、マークアップをレンダリングすると、スクリプトが実行される可能性があります。そうでない場合は、javascript を外部ファイルとして含めてみて、それが実行時間に影響するかどうかを確認してください。

ブラウザは一般的に、特にページの読み込み時に、javascript の実行を開始する際に、仕様に従ってある程度の余裕があると思います。ポーリングなしで完全にクロスブラウザーの方法でこれを行うことはできない場合があります。

于 2008-10-26T05:30:43.090 に答える
0

Chrome開発者と話しましたか?それについてバグを開きましたか?IMHOの最善の解決策は、Chromeを回避策ではなく、他のブラウザと同じように動作させることです。

さて、実際にはおそらく短期的な回避策が必要になります。しかし、HTTP、HTML、CSS処理など、各ブラウザーが各側面で異なる動作をする世界を想像してみてください...それは快適な場所ではありません!

于 2008-10-26T16:50:41.300 に答える
0

ストリームは機能しています。まぶたからの答えが解決策です。

print "2048 ポイント[BR>\n";

[ = <

ところで、ユーザーエージェントを見てください。Safariも多くのバイトを必要とします。1024 だと思います。Firefox はそれほど多くのバイト数を必要としません。

于 2008-11-25T16:46:46.510 に答える
0
<?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;
}
?>

最初に、少なくとも 2048 バイトのデータを送信します。その後、正常に動作します。また、body タグ内に script タグを保持するようにしてください。奇妙なことに、私の場合、1024バイトを追加するとうまくいきました。これがお役に立てば幸いです

上記のプログラムは google chrome で正常に動作しています。

于 2009-04-28T07:48:46.877 に答える