• 主页
  • 随笔
  • 技术笔记
  • 全部文章
标签 友链 关于我

  • 主页
  • 随笔
  • 技术笔记
  • 全部文章

WKWebView离线缓存

阅读数:次 2018-10-10
字数统计: 589字   |   阅读时长≈ 2分

WKWebView离线缓存

相信使用过webView的人都挺烦每次都有一段空白期,用户体验感极差,所以公司要求在webView上增加缓存,废话不多说了,进入正题!

1.使用WKWebView

        // 1.简单创建WKWebView
        WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height - 20)];
        webView.navigationDelegate = self;
        [self.view addSubview:webView];
        // 2.创建请求
        NSURL *URL = [NSURL URLWithString:@"xxxxxxxxx"];
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL];
        // 3.加载网页
        [webView loadRequest:request];

2.最重要的部分来了,重写NSURLProtocol

思路逻辑:

  使用webView加载页面的时候,如果有缓存,就先加载缓存,没有就请求网络,然后使用系统自带的缓存方式存储;当重新请求网络,就算下与最近一次网络请求相隔有没一个小时,有的话就重新请求网络。这边借用下一大神的图片

avatar

我们这边继续使用大神写好的一个自定义的NSURLProtocol。
使用方法是:

  • 1、pod ‘JWNetAutoCache’

  • 2、在需要开启的时候调用

    [JWCacheURLProtocol startListeningNetWorking];

  • 3、使用结束后调用:

    [JWCacheURLProtocol cancelListeningNetWorking];

然而这个对于WKWebView来说,它是不走NSURLProtocol的,看到这,惊不惊喜,意不意外!!!不过别急,离成功就差一步了。当然,关于UIWebView的更详细操作请看UIWebview使用缓存并且保证实时性,

3.让WKWebView走NSURLProtocol

  在 WKWebView 中的请求只是象征性走

+(BOOL) canInitWithRequest:(NSURLRequest *)request
之后的整个请求流程似乎就与 NSURLProtocol 完全无关了,但是在UIWwbView中确是正常的,不过由于我之前在WKWebView的代理中实现了一些东西,所以没改变使用WKWebView。一开始一脸懵逼,不懂为啥,不过幸亏在一大神那得到了解决方法,由于大神说的很详细,所以我这边就不重述了(呼呼,其实是我自己也讲不太清楚)。

下面来操作一番:

  • 1、先下载一大神写的NSURLProtocold的分类NSURLProtocol+WKWebVIew

  • 2、然后在viewDidLoad里通过注册把http和https请求交给NSURLProtocol处理。

         [NSURLProtocol wk_registerScheme:@"http"];
         [NSURLProtocol wk_registerScheme:@"https"];
    

到目前为止,可以说是大功告成了。关于这一方面的,想了解更多的请看iOS WKWebView (NSURLProtocol)拦截js、css,图片资源。

参考文献:
iOS WKWebView (NSURLProtocol)拦截js、css,图片资源
UIWebview使用缓存并且保证实时性

  • 本文作者: Grx
  • 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2018/10/10/WKWebView离线缓存/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • WKWebView

扫一扫,分享到微信

iOS字体适配的三种实现方法
微信高性能通用key-value组件MMKV
  1. 1. WKWebView离线缓存
    1. 1.1. 1.使用WKWebView
    2. 1.2. 2.最重要的部分来了,重写NSURLProtocol
    3. 1.3. 3.让WKWebView走NSURLProtocol
© 2014-2024 Grx
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量次 | 本站访客数人
  • 标签
  • 友链
  • 关于我

tag:

  • life
  • OC
  • Google
  • Fastlane
  • Flutter
  • hexo
  • 智能家居
  • Apple Watch
  • 逆向
  • Lottie
  • PHP
  • cocos2d
  • Mac
  • MonkeyKing
  • RN
  • Swift
  • RAC
  • WKWebView
  • WebView
  • Xcode
  • xcode
  • ios
  • Android
  • appledoc
  • MMKV
  • LLVM
  • FreamWork






    
    

  • 唐巧的博客
  • 王巍(喵神)OneVsDen
  • 阿里“念纪“
  • 滴滴-戴铭
  • 郭曜源(ibireme)
  • 阿里”南栀倾寒“
  • 蘑菇街李忠
  • 码农人生
  • 玉令天下
  • bang
  • Ian的博客
这里是Grx的个人博客:
iOS开发工程师一枚
联系方式:
QQ:1217255509
Email:grx0917@sina.com
知识管理,时间管理,自我管理,架构即未来
欢迎技术交流!