首页 新闻 会员 周边

【Android开发】怎么获取webview真正加载网页完成的回调?

0
悬赏园豆:30 [已关闭问题] 关闭于 2017-05-23 15:41

我这边测试加载资源还没完成的时候后,onPageFinished回调就执行了。

求助如何获取真正的加载完成的回调,也就是所有资源都加载完毕并显示出来的回调?

Ada_阿达的主页 Ada_阿达 | 初学一级 | 园豆:8
提问于:2017-05-15 09:35
< >
分享
所有回答(4)
0

http://blog.csdn.net/agods/article/details/7443832,参考一下这个

风行天下12 | 园豆:3867 (老鸟四级) | 2017-05-15 11:12
0

private WebView mWebView;

mWebView.setWebViewClient(new WebviewDlgClient());

 

WebviewDlgClient 继承自WebViewClient,实现onPageFinished就可以了。

zsounder | 园豆:2819 (老鸟四级) | 2017-05-15 11:27

关键是onpageFinished的时机不对  看图片上的log   资源还没加载完,onpageFinished回调就执行了

支持(0) 反对(0) Ada_阿达 | 园豆:8 (初学一级) | 2017-05-15 11:43

@happyburglar: 那可能是你的页面有多个frame,或存在redirect,这样onpagefinished可能会被调多次,你看看是不是存在多次的onpagefinished吧,如果是,大体可以按下面的思路看看。

1: shouldOverrideUrlLoading时候设定redirect为true,loadingFinished为false

2: onPageStarted时设置loadingFinished为false

3: onPageFinished的时候,如果没有redirect,loadingFinished为true,当loadingFinished为true且不存在redirect时,认为是finish

 

支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2017-05-15 12:01

@zsounder: 我的页面没有重定向,我重新打了下log,这里我的setting已经设置为mWebView.getSetting().setBlockNetworkImage(false),但是不知道为什么图片还是在onpageFinished之后加载,我测试了下加载今日头条的文章回调时机是对的

我的文章地址:

http://mobile.stvgame.com/wshouyou-phone/article/article_details.html?articleId=8a9848e55bfc8046015c055d10430009&verInt=302

支持(0) 反对(0) Ada_阿达 | 园豆:8 (初学一级) | 2017-05-15 12:19

@happyburglar: android好像是没api通知页面全部东西都下完了,只是url load完毕的时候有通知,你可以试试采用overriding WebView invalidate方法,getContentHeight大于0,可以认为页面已经显示了吧。

支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2017-05-15 12:32

@zsounder: 对我来说不适用,我是需要等所有资源加载完毕,获取到整个网页的高度的

支持(0) 反对(0) Ada_阿达 | 园豆:8 (初学一级) | 2017-05-15 14:49
0

加载完的定义是指什么 —— 比如你所谓图片,这个dom可以是该文档中引用的js动态创建的。如果仅仅是该htm如上所言,甚至可以更简单。因此你需要检查的仅仅是个dom元素而已,实现可以很简单:1.引入js进行执行回调;2.外部代码直接检查dom。

花飘水流兮 | 园豆:13560 (专家六级) | 2017-05-16 08:43
0

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的情况,没办法。。。

hexiaoco | 园豆:202 (菜鸟二级) | 2017-10-11 17:30

还有这个你可以参考下,

监听WebView显示结束(回调函数实现)

  1. public class MyWebView extends WebView{  
  2.     interface DisplayFinish{  
  3.         void After();  
  4.     }  
  5.     DisplayFinish df;  
  6.     public void setDf(DisplayFinish df) {  
  7.         this.df = df;  
  8.     }  
  9.     public MyWebView(Context context, AttributeSet attrs) {  
  10.         super(context, attrs);  
  11.     }  
  12.     public MyWebView(Context context) {  
  13.         super(context);  
  14.     }  
  15. //onDraw表示显示完毕  
  16.     @Override  
  17.     protected void onDraw(Canvas canvas) {  
  18.         super.onDraw(canvas);  
  19.         df.After();  
  20.     }  
  21. }  
支持(0) 反对(0) hexiaoco | 园豆:202 (菜鸟二级) | 2017-10-11 17:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册