使用UIWebView开发hybrid应用(二)

相关文章:

使用UIWebView开发hybrid应用(一)

 

 hybrid应用中,缓存处理是比较棘手的。

objective-c有缓存的类NSURLCache,官方给出的解释是:It provides a composite in-memory and on-disk cache。也就是说,当应用关闭后,缓存就失效了。为了使不经常变动的数据能持久化存储,需要自己来实现。


思路:

UIWebview每请求一个URL,便将页面及其对应数据存储到本地。当用户再次请求该数据时,直接加载disk里的数据。


方案:

1、第一次请求URL时,将HTML文件存到本地;并对该文件解析,找出js、css、图片的链接,也下载到本地;把HTML文件中图片等资源的链接替换成本地路径。

如示例中链接中包含如下的链接:

<link href="/IosMoive/Content/bootstrap/css/bootstrap-min.css" rel="stylesheet">
<link href="/IosMoive/Content/Bootstrap/css/bootstrap-theme-min.css" rel="stylesheet">
<script src="/IosMoive/Content/Scripts/jquery2.js"></script>
<img src="/IosMoive/Content/Images/m_ico_support_order.png">
<img src="/IosMoive/Content/Images/m_ico_support_act.png">

它们分为三类,以link、script、img开头,很容易通过一个正则表达式将它们提取出来。

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"<(img|link|script|a)[^>]+?(src|href)=[\"']?([^>'\"]+)[\"']?" options:NSRegularExpressionAllowCommentsAndWhitespace error:nil];
NSArray* result = [regex matchesInString:htmlString options:NSMatchingReportCompletion range:NSMakeRange(0, htmlString.length)];
result就是包含配到上述链接的列表。找到每个src后,给它们分类,再根据不同的类型将这些文件下载下来,记录在本地的地址。再把 HTML文件网络路径替换成本地路径。


2、再次请求该URL时,UIWebview加载本地路径,响应速度非常快。

[_webView loadHTMLString:loadedString baseURL:[NSURL fileURLWithPath:filePath]];


结语:

具体的方法在后面给出的demo中。当然,还有很多细节不能一一道出,但看看源代码会清晰许多。程序也有需要优化地方,欢迎指出。


          demo下载

注:demo的原来的地址已经失效了,可以换成这个地址:http://61.191.24.229:2042/IosAiMovie/FilmList/FilmList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值