OC與H5的交互已經(jīng)非常常見了,頁面里有H5頁面,我們會(huì)用到UIWebview;但是在用的時(shí)候,UIWebview會(huì)神奇的自動(dòng)緩存之前的CSS樣式(CSS是控制頁面的樣式的,比如頁面字體顏色或者字體大小...),這就導(dǎo)致了更改過webview的頁面樣式之后,我們APP端再打開這個(gè)webView頁面,發(fā)現(xiàn)頁面的樣式根本沒有任何的變化,是不是瞬間不開森啦~
什么情況啊,所有的寫法都是沒有問題的,緩存機(jī)制是UIWebview帶了,是不是和我們開發(fā)沒有關(guān)系啦(我當(dāng)時(shí)就是這么安慰自己的);不過老大不管這些,如果不解決這個(gè)問題,和H5的聯(lián)調(diào)很不方便(需要卸載重裝才可以);于是乎,我找到了一個(gè)感覺可以的方法:
//清除webView的緩存
[[NSURLCache sharedURLCache] removeAllCachedResponses];
我把上面的方法寫到了頁面將要消失的時(shí)候,清除UIWebview緩存的東西,然后讓H5開發(fā)的盆友更改了頁面樣式,期待滿滿的重新打開了頁面,我尼瑪,沒有變,關(guān)閉APP然后重啟,變了,里面高興了點(diǎn)兒,不過也是不行啊這樣的效果,然后我找到了下面的方法:
//清除請求
[[NSURLCache sharedURLCache] removeCachedResponseForRequest:self.request];
//清除cookies
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
[storage deleteCookie:cookie];
}
上面的方法寫過之后也是沒有任何的改進(jìn)了,還是需要重啟才有效果;(也就是上面所有的方法都沒有解決問題)
接著找問題所在,我在加載URL的時(shí)候,用的方法是:
self.request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:htmlString]];
就是這個(gè)問題所在,導(dǎo)致了自動(dòng)緩存,更改無效,吭我?。粨Q種方法:
//加載請求的時(shí)候忽略緩存
self.request = [NSURLRequest requestWithURL:[NSURL URLWithString:htmlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5.0];
然后可以把上面的方法給丟掉了,這樣就可以解決這個(gè)問題了,很簡單有木有;
2018-03-22更新
有同學(xué)使用上面方法依然無法解決問題,經(jīng)過不斷的查找資料和咨詢前端開發(fā)朋友,找到了幾種方式,都是需要在web端處理的:
方式一:引入CSS、JS文件時(shí)路徑后面拼接時(shí)間戳
<script type="text/javascript" src="index.js?t=20180322"></script>
<link rel="stylesheet" href="index.css?t=20180322">
方式二:引入CSS、JS文件時(shí)路徑后面拼接版本號(記得更新版本號)
<script type="text/javascript" src="index.js?v=1.0.1"></script>
<link rel="stylesheet" href="index.css?v=1.0.1">
找到了一篇不錯(cuò)的文章解釋這個(gè)緩存的問題,說的是上面的兩種方式不是最優(yōu)的,不過我想一般的項(xiàng)目這么寫就行了,大公司可能要求更高些;
文章資料,有興趣的同學(xué)可以讀讀,挺不錯(cuò)的!
如果有同學(xué)有更好的方法,希望能夠留言,把寶貴的方法分享一下,在此提前謝過了!