문제

Google Chrome 은이 너겟을 만날 때 다른 브라우저와 동일하게 작동하지 않습니다.

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

    sleep(5);
}
?>

무엇이든하기 전에 연결이 종료되기를 기다리고있는 것 같습니다.

폴링 외에 Google 크롬에서 어떻게 비슷한 일을 할 수 있습니까?

도움이 되었습니까?

해결책

일부 브라우저는 사용 가능한 데이터를 렌더링하기 전에 특정 수의 바이트를 다운로드해야합니다. 마지막으로 당신이하고있는 일을 시도했을 때 나는 브라우저가 귀찮게 할 수 있도록 300 개의 공간과 같은 것을 버려야했던 것을 기억합니다.

다른 팁

나는 이것과 비슷한 문제가 있었고 HTML 태그를 추가하여 해결했습니다 (내 경우에는u003Cbr /> ) 각 플러시 전에.

내 생각에 Chrome은 요소를 기다리는 것입니다. 표시되고 있습니다 재 렌더를 트리거하기 전에 문을 닫습니다. 그래도 그것은 단지 추측 일뿐입니다.

1024 바이트가 필요하지 않은 것 같습니다. 작동했을 때 512 바이트 미만이었을 것 같습니다.

나는 현재 크롬에 액세스하여 아이디어를 테스트하기를 바랍니다. 후에 HTML을 추가해 보셨습니까? </script> 그리고 그것이 점진적으로 렌더링되는지보고 있습니까? 나는 그것이 그렇게 될 것이라고 생각합니다. 그렇다면 Chrome이 JavaScript를 실행하고 싶지 않다는 증거가 될 것입니다. <script> 페이지가로드되는 동안 요소. 물론, 마크 업을 렌더링하면 스크립트가 실행되도록 트리거 될 수 있습니다. 그렇지 않은 경우 JavaScript를 외부 파일로 포함시키고 실행 시간에 영향을 미치는지 확인할 수 있습니다.

브라우저는 일반적으로 JavaScript를 실행하기 시작할 때, 특히 페이지가로드 될 때 사양에 따라 약간의 여유가 있다고 생각합니다. 폴링 없이도 완전히 브라우저로이를 수행하는 것은 불가능할 수 있습니다.

Chrome 개발자와 이야기 했습니까? 그것에 대한 버그를 열었습니까? IMHO 최상의 솔루션은 다른 브라우저와 마찬가지로 Chrome이 작업을 수행하지 않고 행동하는 것입니다.

좋아요, 실제로 단기 해결 방법이 필요할 것입니다. 그러나 HTTP, HTML, CSS 처리는 각 브라우저가 각 측면에서 다르게 행동하는 세상을 상상해보십시오.

스트림이 작동합니다. 눈꺼풀의 대답은 해결책입니다.

"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,"&nbsp;");
        echo $padstr;
        echo "</body></html>";
    }
    flush();

    sleep(5);
    $i = $i + 1;
}
?>

주먹 시간 동안 최소 2048 바이트의 데이터를 보내십시오. 그러면 잘 작동합니다. 그리고 스크립트 태그를 바디 태그로 유지하십시오. 이상한 점은 제 경우에는 1024 바이트를 추가하면 작동하는 것입니다. 이것이 당신에게 도움이되기를 바랍니다

위의 프로그램은 Google Chrome에서 잘 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top