WebView自动缓存-清除缓存

JavaScript09

WebView自动缓存-清除缓存,第1张

iOS的Webview加载HTML时会自动缓存JS、CSS等文件,当下次加载HTML时会根据请求的缓存策略是否使用缓存本地的JS和CSS,如果本地有缓存,那么直接返回本地资源(判断是否过期);如果没有本地缓存则向服务器请求地址。 1、NSURLRequestCachePolicy 指定缓存逻辑。URL加载系统提供了一个磁盘和内存混合的缓存,来响应网络请求。 2、NSURLRequestUseProtocolCachePolicy = 0 默认缓存策略 3、NSURLRequestReloadIgnoringLocalCacheData 不使用本地缓存数据 4、NSURLRequestReloadIgnoringLocalAndRemoteCacheData 直接加载源数据 5、NSURLRequestReturnCacheDataElseLoad 指定已存的缓存数据应该用来响应请求,不管它的生命时长和过期时间。 6、NSURLRequestReturnCacheDataDontLoad 指定已存的缓存数据用来满足请求,不管生命时长和过期时间。 也可以使用这个方法清除单个请求的缓存 之前遇到一种情况,app端加载服务器一个网页,js调用http接口没有传参数报错了,服务端更新之后安卓重新加载没有问题,iOS端一直加载都会报错,卸载重装之后就没问题了。 最后发现在沙盒的Caches目录中找到一个WebKit的文件夹,把这个文件夹删了也没问题 借鉴:html开发变态的静态资源缓存与更新 iOS开发:解决UIWebView自动缓存导致页面不可刷新问题 iOS html5使用缓存并及时更新方案总结

Web view h5不更新不缓存js是为什么?Web view h5不更新不缓存的话要,要关机重启,关机重启以后,然后再点更新,再点缓存的话,他就会更新缓存了,如果说是开关机不好用的话,直接在设置里边点更新缓存

通过NSURLProtocol注册NSURLProtocol的派生类UrlRedirectionProtocol

并在派生类实现url拦截并重定向本地url

重写startLoading方法实现本地资源重载

js通过window.webkit.messageHandlers.方法名.postMessage(消息体)调用oc并传参

//oc调js通过wkwebview的api调用js

//oc调js传对象,可以讲字典和数组转换成json并替换"""成"'"传给js,js可以接受不了到的就直接是js对象了

我们可以把js调用oc和oc调用js的函数写成一个或多个category以实现不同模块的js<->native调用

比如我的wkwebview放到了一个WebVC的控制器里,然后把交互事件放到不同的category里,然后根据实际需要使用

截图不知道为什么传上去后变这么大,知道的可以告诉我一下

demo地址

https://github.com/joy-make/WKWebView.git