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 高度
}
}
}
}
