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

我想知道如何确定何时完成 WebView加载。

让我完全定义。

  • 所有重定向都已发生
  • 页面明显显示,尚未加载任何内容

这个问题的答案很糟糕:

WebViewClient.onPageFinished() – 如果有重定向加载页面,则会多次触发。 它也会在页面显示之前触发。

PictureListener.onNewPicture() – 每次屏幕更改时都会触发,每次重定向都会触发AFAICT。 我怎么知道哪个射击是最后一个?

WebChromeClient.onProgressChanged() – 与onPageFinished相同的问题。 (在David建议以下解决方案后添加)

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

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

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

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

感谢David Caunt建议您查看响应标头。

我发现以下内容非常好用:

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

您是否考虑过设置自己的WebChromeClient?

看起来onProgressUpdated可能会在页面完全加载时通知您。

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