2011-04-07 6 views
26

WebView가 언제 일 때를 결정하는 지 알고 싶습니다. 로딩이 완료되었습니다.Android WebView가 완전히로드되는시기를 결정하는 방법은 무엇입니까?

완전하게으로 정의하자. - 리디렉션이있는 경우이 여러 번 발사

WebViewClient.onPageFinished() :

  • 모든 리디렉션 아무것도이 질문에

잘못된 답변을로드 아직 없습니다, 페이지가 눈에 띄게 표시됩니다

  • 를 일어 페이지 로딩. 또한 페이지가 표시되기 전에 실행됩니다.

    PictureListener.onNewPicture() -이 때마다 화면이 변경되고 AFAICT가 리디렉션됩니다. 어떤 발사가 마지막 발사인지 어떻게 알 수 있습니까?

    WebChromeClient.onProgressChanged() - onPageFinished와 같은 문제입니다. (David이 아래에서이 해결책을 제안한 이후에 추가되었습니다.)

    Thread.sleep(5000) - 이것이 왜 받아 들여지지 않는가?

    물론 위의 작업을 영리하게 조합하면 완벽 할 것입니다.

    왜 내가이 사실을 알고 싶습니까? 웹보기가로드가 완료 완전히 되면 좀 자바 스크립트 한 번을 주입하려는 때문입니다.

  • +1

    'WebViewClient.onPageFinished()'에 "bad answer"를 추가하면 [this] (http://stackoverflow.com/a/5172952/725417)에 따르면 여러 번 실행됩니다 ** 또한 ** if 한 페이지에 여러 개의 iframe이 있습니다. – uTubeFan

    +0

    @Carlos 사람은 당신과 정확히 같은 위치에 있습니다.thats가 내 상황을 악화시키는 유일한 이유는 PictureListener가 더 이상 사용되지 않는다는 것입니다. 솔루션을 생각해 낼 수 있었습니까? 웹 너비와 화면 너비를 나누어야하는 총 페이지 수를 계산해야합니다. 그러나 페이지가 화면에 완전히 렌더링 될 때까지는 그렇게 할 수 없습니다. 어떤 해결책? –

    +0

    @ArunavhKrishnan 잘 보니 지난 3 년 전이었습니다. 결국 나는 받아 들인 대답과 비슷한 것을했다고 생각합니다. 행운을 빕니다! –

    답변

    8

    응답 헤더를 살펴 보도록 David Caunt에게 감사드립니다.

    나는 꽤 잘 작동하려면 다음을 발견했습니다

    대신, 웹보기는 HTTP 요청을 수행하는 데

    자신이 그래서 당신은 리디렉션에 대한 HTTP 상태 코드를 확인할 수 있습니다 그들이 할. 리디렉션 체인을 따릅니다. 리디렉션이 아닌 요청을 받으면 플래그를 설정하고 webview.loadDataWithBaseURL을 통해 웹보기로 데이터를 보냅니다. 플래그는 WebViewClient.onPageFinished()에서 확인되므로 모든 리디렉션이 완료되었음을 알 수 있습니다. 이 시점에서 자바 스크립트를 삽입 할 수 있습니다. 물론이 시점에서 페이지 자체가 일부 자바 스크립트 조작을 수행하고있을 수도 있습니다. 알아보기가 어렵습니다. 따라서 자바 스크립트에 지연 (500ms)을 추가하면 DOM을 정착시킬 수 있습니다. setTimeout(function(){/* your code */}, 500).

    +1

    알아두면 유용합니다! 페이지 자체의 자바 스크립트는 끝나면 감지하기 어렵습니다. –

    +1

    @Carlos Rendon +1 큰 윤곽선. 나는 이것이 WebView 나 위성 인터페이스에서 구현되지 않았다는 것에 놀라움을 금치 못했다. 이 기능은 너무 많이 필요하지만 WebView 담당자가 할 수 있었던 유일한 방법은 PictureListener를 사용 중지하는 것입니다. 왜 그런가? – uTubeFan

    +0

    그리고 그 동안, 나는 [WebView에서 http 응답 헤더에 액세스하는] 꿈꾸는 유일한 사람이 아닙니다. (http://stackoverflow.com/questions/3134389/access-the-http-response-headers -in-a-webview). – uTubeFan

    1

    자신 만의 WebChromeClient를 설정 했습니까?

    페이지가 완전히로드되면 onProgressUpdated님께 알릴 수 있습니다.

    이것은 Android의 내장 브라우저에서 사용되는 것으로 보입니다.

    +0

    제안 해 주셔서 감사합니다. 불행히도 WebViewClient.onPageFinished()와 동일한 문제가 있으며 리디렉션으로 인해 여러 번 발생합니다. 예를 들어 "gmail.com"의 경우 진행률 == 100으로 3 번 실행됩니다. –

    +1

    진행률의 다음 0 값은 언제 입력됩니까? 응답이 리디렉션을 발행 한 직후에 발생하면 제한 시간을 사용하여 마지막 요청을했다고 가정합니다. 그렇지 않으면, 나는 응답 헤더를 얻는 방법이나 비슷한 것을 찾고있을 것이다. –

    관련 문제