iOS開發(fā):解決UIWebView自動(dòng)緩存導(dǎo)致頁面不可刷新問題

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é)有更好的方法,希望能夠留言,把寶貴的方法分享一下,在此提前謝過了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容