http://blog.csdn.net/agods/article/details/7443832,参考一下这个
private WebView mWebView;
mWebView.setWebViewClient(new WebviewDlgClient());
WebviewDlgClient 继承自WebViewClient,实现onPageFinished就可以了。
关键是onpageFinished的时机不对 看图片上的log 资源还没加载完,onpageFinished回调就执行了
@happyburglar: 那可能是你的页面有多个frame,或存在redirect,这样onpagefinished可能会被调多次,你看看是不是存在多次的onpagefinished吧,如果是,大体可以按下面的思路看看。
1: shouldOverrideUrlLoading时候设定redirect为true,loadingFinished为false 2: onPageStarted时设置loadingFinished为false 3: onPageFinished的时候,如果没有redirect,loadingFinished为true,当loadingFinished为true且不存在redirect时,认为是finish
@zsounder: 我的页面没有重定向,我重新打了下log,这里我的setting已经设置为mWebView.getSetting().setBlockNetworkImage(false),但是不知道为什么图片还是在onpageFinished之后加载,我测试了下加载今日头条的文章回调时机是对的
我的文章地址:
http://mobile.stvgame.com/wshouyou-phone/article/article_details.html?articleId=8a9848e55bfc8046015c055d10430009&verInt=302
@happyburglar: android好像是没api通知页面全部东西都下完了,只是url load完毕的时候有通知,你可以试试采用overriding WebView invalidate方法,getContentHeight大于0,可以认为页面已经显示了吧。
@zsounder: 对我来说不适用,我是需要等所有资源加载完毕,获取到整个网页的高度的
加载完的定义是指什么 —— 比如你所谓图片,这个dom可以是该文档中引用的js动态创建的。如果仅仅是该htm如上所言,甚至可以更简单。因此你需要检查的仅仅是个dom元素而已,实现可以很简单:1.引入js进行执行回调;2.外部代码直接检查dom。
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
Log.d(TAG, "on page progress changed and progress is " + newProgress);
// 进度是100就代表dom树加载完成了
if (newProgress==100) {
}
}
});
这个是正解,不过会触发多次,就是会出现多次newProgress==100的情况,没办法。。。
还有这个你可以参考下,