如何确定Android WebView何时完全加载?

我想知道如何确定一个WebView 完全加载完成

让我完全定义。

  • 所有redirect都发生了
  • 该页面是可见的显示,没有任何尚未加载

这个问题的答案不好:

WebViewClient.onPageFinished() – 如果存在redirect加载页面,将多次触发。 它也会在页面显示之前触发。

PictureListener.onNewPicture() – 每次屏幕更改和AFAICT每次redirect时都会触发。 我怎么知道哪一次是最后一次?

WebChromeClient.onProgressChanged() – 与onPageFinished相同的问题。 (在David在下面提出这个解决scheme之后添加

Thread.sleep(5000) – 应该是显而易见的,为什么这是不可接受的。

当然,上述的巧妙组合将是完美的。

为什么我想知道你问这个? 因为一旦webview完全加载完成,我想要一次注入一些javascript。

Solutions Collecting From Web of "如何确定Android WebView何时完全加载?"

感谢David Cauntbuild议查看响应标题。

我发现以下工作非常好:

而不是让webview执行HTTP请求,自己做,以便您可以检查redirect的HTTP状态代码。 按照redirect链。 当你得到一个不是redirect的请求时,设置一个标志并通过webview.loadDataWithBaseURL将数据发送到webview。 在WebViewClient.onPageFinished()检查该标志,以便知道所有redirect都已完成。 JavaScript可以在这一点注入。 当然,页面本身可能会在这个时候做一些javascript操作,所以很难知道,所以在javascript中添加一个延迟(比如500ms)可以让DOM解决。 setTimeout(function(){/* your code */}, 500)

你有没有看过设置自己的WebChromeClient?

它看起来像onProgressUpdated可能会通知您,当页面已完全加载。

这似乎是Android内置浏览器使用的方法。