2008-12-05 72 views
11

我有一個簡單的應用程序加載在UIWebView iPhone優化的網站。是否可以緩存加載在iPhone UIWebView中的資源?

問題是,緩存似乎不工作:

[webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: url] 
             cachePolicy: NSURLRequestUseProtocolCachePolicy 
            timeoutInterval: 60.0]]; 

在這個偏遠的頁面(CSS,圖片,外部JavaScript文件)引用的任何東西永遠不會獲取緩存(請求從未發送IF-改進釋放由於頭或任何緩存控制的其他方式。)

這可能嗎?看起來有一個常規的Cocoa WebView有一個代理方法,可以調用每個資源請求和後期加載(-didFinishLoadingFromDataSource:),您可以使用它來推出自己的緩存..但這在這裏似乎不適用。

我的整個頁面(頁面及其引用的資源)約爲89K壓縮..這是在一些景點緩慢通過3G,甚至超過EDGE更糟。傳入的請求至少表明它接受壓縮(accept-encoding=gzip, deflate),所以這很好,我想。

我讀this yui study,這似乎表明,iPhone將緩存每個項目25K。引用超過25k未壓縮的唯一東西是jquery(打包但未壓縮 - 它是30k)。其他一切都應該可緩存。取回頁面中引用的任何內容的請求都不會在服務器端觸發304。

那衣的研究是從差不多一年前,而我只用移動Safari瀏覽器的猜測。

這是一個原生iPhone應用程序使用UIWebView

回答

2

您可以隨時手動執行的請求,儘管這會是棘手 - 然後你可以緩存的東西到你的心臟的內容。構建一個UIWebViewDelegate,在webView:shouldStartLoadWithRequest:navigationType:中啓動請求,緩存結果,並使用UIWebView的loadHTMLString:baseURL:更新視圖。

這將是醜陋的,事情不會那樣順利,你可能想工作,但它可能是配不上你所需要的。這個問題的

7

一個解決辦法,因爲我看到的是

1)下載HTML代碼

2)它存儲字符串

3)中找到它所有的外部鏈接像

<img src="img.gif" width="..." height="..." /> 

4)下載他們所有

5)與嵌入式底座替換它們64編碼版本

<img src="data:image/gif;base64,R0lGODlhUAAPA...JADs= " width="..." height="..." /> 

6)最後存儲與嵌入圖像完整的HTML,只要你想。

+10

天才,雖然相當令人不安。 – 2010-02-11 15:18:29

+0

做錯的最好方法。男人,我們在這裏尋找至少更方便的解決方案 – 2013-10-18 07:38:27

+0

@ eagle.dan.1349爲什麼這是做錯的最好方法?在沒有「更方便的解決方案」的情況下,*是最方便的解決方案 – abbood 2013-11-13 14:43:18

4

您現在可以通過所有眼看互動嘗試ASIWebPageRequest

ASIWebPageRequest是一個新的實驗除了ASIHTTPRequest家庭。它可以用來下載一個完整的網頁,包括像一個請求中的圖像和樣式表等外部資源。 下載網頁後,請求將解析內容,查找外部資源,下載它們,並使用Data URIS直接將它們插入到html源代碼中。然後,您可以將響應直接放入Mac上的UIWebView/WebView。

我只能建議大家使用Ben Copsey偉大的庫來處理各種HTTP操作。

UPDATE:本已經停止ASIHTTPRequest。我不再建議使用它。

相關問題