我試圖解決兩件事情在我UIWebView
陷入困境的關係:的UIWebView和NSURLCache有
- 加載本地資產替代性遠程監控的,在適當的條件下
- 加載遠程資產爲正常,如果有沒有本地的或者他們已經過時
- 允許web視圖去「背」,而無需重新加載它的HTML表單服務器
所以處理#1和#2,我implemen定製了一個自定義子類NSURLCache
。它在webview請求資產時被調用,並且我可以沿着本地發送,而不是中止服務器對資產的調用。我甚至有一個小時間戳系統,知道本地版本是否舊,或者不知道要使用哪一個。
但#3扔我一個循環。看起來無論緩存控制標題如何,UIWebView
總會在返回時重新加載HTML。
於是,我就強迫HTML緩存在我的自定義NSURLCache
類。它似乎工作,並返回與我想要的HTML NSCachedURLResponse
的實例,但UIWebView
無法注意並從服務器加載它。經過一番搜索後,我發現UIWebView
和url緩存存在一些「不一致性」,我想這是一個。非常適合資產,但對於構成要顯示的頁面的HTML來說並不那麼好。
因此,我決定,因爲這可能無法正常工作,請手動完成。我創建了一堆網址,以及我手動獲取並加載數據的loadData:MIMEType:textEncodingName:baseURL:
。你看,它似乎很好!我現在可以回去了,web視圖委託會攔截負載,並告訴它加載手動提取的數據,而服務器不會被命中。
不過,後來我發現這是不再使用我的資產NSURLCache。如果您使用loadRequest:
加載內容,而不是通過加載數據或正確設置baseUrl
的html字符串,它似乎只會請求緩存的資產。
因此,儘管我的努力,我不能讓Web視圖有條件地加載本地資產,然後返回沒有擊中服務器。似乎我在SDK中有一些錯誤。
UIWebView
忽略服務器Cache-Control
標題爲HTML內容UIWebView
要求一個NSCachedURLResponse
的主HTML請求,但是然後被忽略並丟棄。UIWebView
向資產請求NSURLCache
,如果您使用請求加載資源,但使用HTML或數據加載時,它會完全繞過緩存並直接從遠程服務器請求。
信息首先,任何人看到了解決這些事?其次,任何我愚蠢的原因,而這些實際上並不是SDK錯誤?
好主意 - 因爲這也節省了內存分配 - 但是如何從網絡或緩存中獲取@ runtime所需的圖像資源?我必須有時解決它,但不知道如何...這是我的嘗試:http://stackoverflow.com/questions/3215641/overriding-nsurlcaches-cachedresponseforrequest-to-cache-uiwebview-assets-with-t – 2010-07-09 22:55:45
你可以真的。混合遠程內容和本地內容似乎是一個巨大的問題。 NSURLCache覆蓋並不像廣告那樣工作。但是如果內容在本地啓動,加載了'file://'樣式的url,它可以很好地引用遠程資產和本地資產。但這意味着您必須手動下載html,css,js等本地副本。它工作正常,但仍然不容易。 – 2010-07-10 01:10:33