一:前言:项目中整个一tab页因为需求变成了加载webView,没网情况下会一片白。。很多APP无网显示的是一张图片,笔者强迫症,坚决做到最好的用户体验,于是缓存了整个webview;
1. 想通过加载HTMLSting字符串缓存webView是不可行, [self.webView loadHTMLString:HTMLSting baseURL:nil];想走这条路的哥们这里说下,肯定是不行的。。简单说下原因:正常的一个h5网页,包含.css样式,.JS等事件,这些都是外部引用的。。所以你缓存不下来。。。但是如果样式啥的都是内联(类似iOS MVC都在控制器里),那么用这个方法是可行的。。。
2.WKWebView能用这个缓存吗? 当然不可以,它不走NSURLProtocol机制,所以不会对URL进行拦截。
3.通过NSURLProtocol是最快捷的方法,下面开始介绍。
插曲:如果你不喜欢看啰嗦的文字,直接上github地址了,https://github.com/horisea/NSURLProtocol-webView,欢迎star,有网情况下运行一次,断网再运行,网页依旧出现,OK
二:NSURLProtocol是什么?3句话,简单粗暴。 (想了解透彻的话,自己搜去吧)
个人理解:1.当你自定义了继承自NSURLProtocol的子类后,
2.在注册完毕后
3.所有的网络请求都会走你自定义的protocol类,那你想干嘛就可以干嘛了(离线缓存主要是缓存所有的response,data数据),比如(重定向,离线缓存)