分享

风卷流沙 ? Blog 存档 ? iPhone-UIWebView-网页加载进度以及加载时间计算

 w1ids 2014-08-06

注意:这里使用undocumented api,使用该方法可能会影响您的productAppStore拒绝上架!

也不记得最早是什么原因想去了解UIWebView的加载进度和加载时间了,只是前段时间看文档的时候发现WebKit里头有相关的API,所以就nm看了下UIKit中的UIWebView的方法列表,发现他果然使用这些方法。虽然说这些代理是属于WebKit中的方法,WebKit属于PrivateFramework,如果第三方应用使用WebKit铁定被拒绝的。但是UIWebView已经使用了这些代理,如果用继承的方式重写他的代理,那么还是有希望能够通过的,当然,我不保证,也不大关心。我只关心一种简单的查看网页加载进度和加载时间的方式。

我这里使用的方法是WebKit中关于加载资源的WebResourceLoadDelegate委托。 由于是API的使用,我就不详细介绍每个API的东西了,有兴趣的人自己看苹果官网的WebResourceLoadDelegate文档。我只简要介绍一下我使用的四个,以及分别我在这四个地方做了什么事情。

-webView:identifierForInitialRequest:fromDataSource:

每个资源请求都会走一次这个回调函数,所以在这个函数里可以统计这个页面一共有多少资源请求。

-webView:resource:didFinishLoadingFromDataSource:

-webView:resource:didFailLoadingWithError:fromDataSource:

两个方法是当一个求加完成或者失候会被回的,在个函数里统计你已加源。

用上面提到的回,你就可以实现类Opera浏览器的度条“10/86这样度了。

那么,怎么时间呢?

里采用的是,当开始loadRequest候,开始时间,当已加数(包括成功和失)等于网中的,就认为经结束,算一下时间使用,就是该页面的加载耗时。

那么剩最后一个问题,我如果在加载中间跳转到其他页面的话,这个时间该怎么算呢?这个就涉及到WebKit的另外的一些API了,这次就不讨论了。

不过Demo中我有使用一个将就的计时方式,就是当计时结束的时候,再收到一个资源请求的时候,我就认为是开启新的计时。如果是在网页加载途中请求新的页面,他的表现也凑合,虽然不大准确,因为会漏算刚开始的几个资源请求,详细可以看示例代码。

webviewloadprogress

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多