我想知道如何确定WebView 完全 何时完成加载。
让我完全定义 。
这个问题的答案不好:
WebViewClient.onPageFinished()
- 如果有重定向加载页面,则会多次触发。它也会在页面显示之前触发。
PictureListener.onNewPicture()
- 每次屏幕更改时都会触发,每次重定向都会触发AFAICT。我怎么知道哪个射击是最后一个?
WebChromeClient.onProgressChanged()
- 与onPageFinished相同的问题。 (大卫在下面提出这个解决方案后添加)
Thread.sleep(5000)
- 应该是显而易见的,为什么这是不可接受的。
当然,上述有效的巧妙组合将是完美的。
为什么我想知道你问这个? 因为我想在webview 完全 完成加载后,一次注入一些javascript 。
答案 0 :(得分:8)
感谢David Caunt建议查看响应标题。
我发现以下内容非常有效:
不要让webview执行HTTP请求,而是自己执行,以便检查重定向的HTTP状态代码。按照重定向链。当您收到不是重定向的请求时,设置标记并通过webview.loadDataWithBaseURL
将数据发送到Webview。在WebViewClient.onPageFinished()
中检查该标志,以便它知道所有重定向都已完成。此时可以注入javascript。当然页面本身可能正在进行一些javascript操作,很难知道,因此在javascript中添加延迟(比如500ms)可以让DOM解决。 setTimeout(function(){/* your code */}, 500)
。
答案 1 :(得分:1)