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



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

我定义完全

  • 所有重定向都发生了
  • 页面可见显示,没有任何东西尚未加载

对这个问题的错误回答:

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

PictureListener.onNewPicture() -每次屏幕更改时触发,每次重定向时触发AFAICT。我怎么知道哪一枪是最后一枪?

WebChromeClient.onProgressChanged() -与onPageFinished相同的问题。(在David建议这个解决方案之后添加)

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

当然,如果能巧妙地结合上述方法,那就再好不过了。

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

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

我发现下面的工作很好:

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

您看过设置自己的WebChromeClient吗?

它看起来像onprogressupdate可能会通知你当一个页面已经完全加载。

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

最新更新