当前位置 : 主页 > 手机开发 > 其它 >

使用UIWebView开发hybrid应用(二)

来源:互联网 收集:自由互联 发布时间:2021-06-12
hybrid应用中,缓存处理是比较棘手的。 objective-c有缓存的类NSURLCache,官方给出的解释是: It provides a composite in-memory and on-disk cache。也就是说,当应用关闭后,缓存就失效了。为了使不

  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下载

网友评论