ios缓存webview
⑴ ios 应用删掉了为什么webview之前的缓存还存在
浏览器缓存机制是指通过HTTP协议头里的Cache-Control(或Expires)和Last-Modified(或Etag)等字段来控制文件缓存的机制。这应该是WEB中最早的缓存机制了,是在HTTP协议中实现的,有点不同于DomStorage、AppCache等缓存机制,但本质上是一样的。可以理解为,一个是协议层实现的,一个是应用层实现的。
Cache-Control用于控制文件在本地缓存有效时长。最常见的,比如服务器回包:Cache-Control:max-age=600表示文件在本地应该缓存,且有效时长是600秒(从发出请求算起)。在接下来600秒内,如果有请求这个资源,浏览器不会发出HTTP请求,而是直接使用本地缓存的文件。
Last-Modified是标识文件在服务器上的最新更新时间。下次请求时,如果文件缓存过期,浏览器通过If-Modified-Since字段带上这个时间,发送给服务器,由服务器比较时间戳来判断文件是否有修改。如果没有修改,服务器返回304告诉浏览器继续使用缓存;如果有修改,则返回200,同时返回最新的文件。
Cache-Control通常与Last-Modified一起使用。一个用于控制缓存有效时间,一个在缓存失效后,向服务查询是否有更新。
Cache-Control还有一个同功能的字段:Expires。Expires的值一个绝对的时间点,如:Expires:Thu,10Nov201508:45:11GMT,表示在这个时间点之前,缓存都是有效的。
Expires是HTTP1.0标准中的字段,Cache-Control是HTTP1.1标准中新加的字段,功能一样,都是控制缓存的有效时间。当这两个字段同时出现时,Cache-Control是高优化级的。
Etag也是和Last-Modified一样,对文件进行标识的字段。不同的是,Etag的取值是一个对文件进行标识的特征字串。在向服务器查询文件是否有更新时,浏览器通过If-None-Match字段把特征字串发送给服务器,由服务器和文件最新特征字串进行匹配,来判断文件是否有更新。没有更新回包304,有更新回包200。Etag和Last-Modified可根据需求使用一个或两个同时使用。两个同时使用时,只要满足基中一个条件,就认为文件没有更新。
⑵ ios 判断webview是否有缓存
这个实现难点在缓存图片上。html代码的缓存对你来说不是问题吧。基于这个前提, 下面这个方案是我自己做的,也具体在项目实现了。思路是这样的: 第1步、先获取html页面里所有图片地址。 方法一:离线获取获取到html代码。html代码你可以把他理解成是一个很长的字符串。通过正则表达式把这个html页面里的所有img标签url。如果是相对url,就加上host。如果是绝对url,就直接下载。这样这个页面里的所有图片路径都拿到了。 方法一的获取img标签url的正则表达式: NSString *urlPattern = @"<img[^>]+?src=[\"']?([^>'\"]+)[\"']?"; 方法二:通过webview和js 本地程序的交换,获取到html页面所有图片下载地址。
⑶ ios wkwebview 是否有缓存
1:获取webviewscrovllviewcontentsize进行设置
-(void)webViewDidFinishLoad:(UIWebView
*)webView{
CGFloat
webViewHeight=[webView.scrollView
contentSize].height;
CGRect
newFrame
=
webView.frame;
newFrame.size.height
=
webViewHeight;
webView.frame
=
newFrame;
}
2:执行js语句 直接获取html文档dom高度
-(void)webViewDidFinishLoad:(UIWebView
*)webView{
CGFloat
webViewHeight=
[[webView
:
@"document.body.offsetHeight"]floatValue];
// CGFloat webViewHeight= [[webView
:
@"document.body.scrollHeight"]floatValue];
CGRect
newFrame
=
webView.frame;
newFrame.size.height
=
webViewHeight;
webView.frame
=
newFrame;
}
3.先UIWebView高度设再使用sizeThatFits返刚合适
-(void)webViewDidFinishLoad:(UIWebView
*)webView{
CGSize
actualSize
=
[webView
sizeThatFits:CGSizeZero];
CGRect
newFrame
=
webView.frame;
newFrame.size.height
=
actualSize.height;
webView.frame
=
newFrame;
}
4.遍历webview视图 获取UIWebDocumentView高度即实际高度
Objective-C
-(void)webViewDidFinishLoad:(UIWebView
*)webView{
CGFloat
webViewHeight
=
0.0f;
if
([webView.subviews
count]
>
0)
{
UIView
*scrollerView
=
webView.subviews[0];
if
([scrollerView.subviews
count]
>
0)
{
UIView
*webDocView
=
scrollerView.subviews.lastObject;
if
([webDocView
isKindOfClass:[NSClassFromString(@"UIWebDocumentView")
class]])
{
webViewHeight
=
webDocView.frame.size.height;//获取文档高度
webView.frame=
webDocView.frame;
//更新UIWebView 高度
}
}
}
}