是否可以缓存iPhone UIWebView中加载的资源?

kev*_*vin 11 iphone cocoa-touch caching uiwebview ios

我有一个简单的应用程序加载一个针对iPhone优化的网站UIWebView.

问题是,缓存似乎不起作用:

[webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: url]
                                       cachePolicy: NSURLRequestUseProtocolCachePolicy
                                   timeoutInterval: 60.0]];
Run Code Online (Sandbox Code Playgroud)

此远程页面中引用的任何内容(css,图像,外部javascript文件)都不会被缓存(请求永远不会以缓存控制的方式发送If-Modified-Since标头或其他任何内容.)

可能吗?在普通的Cocoa WebView中,似乎有一个委托方法可以调用每个资源请求并发布load(-didFinishLoadingFromDataSource:),您可以使用它来滚动自己的缓存..但这似乎不适用于此.

我的整个页面(页面及其参考资源)压缩了大约89K ..这在一些地方比3G慢,甚至比EDGE更糟糕.传入请求至少表明它接受compression(accept-encoding=gzip, deflate),所以我认为这很好.

我读了这个yui研究,这似乎表明iPhone每个项目将缓存25k.引用的唯一超过25k未压缩的是jquery(打包但未压缩 - 它是30k).其他一切都应该是可缓存的.在获取的页面中引用任何内容的请求都不会在服务器端触发304.

那个yui研究来自差不多一年前,我猜测只有移动野生动物园.

这是UIWebView在本机iPhone应用程序中使用.

Den*_*nis 7

我看到这个问题的一个解决方法是

1)下载HTML代码

2)将其存储在字符串中

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

<img src="img.gif" width="..." height="..." />
Run Code Online (Sandbox Code Playgroud)

4)全部下载

5)用嵌入式Base64编码版本替换它们

<img src="data:image/gif;base64,R0lGODlhUAAPA...JADs= " width="..." height="..." />
Run Code Online (Sandbox Code Playgroud)

6)最终存储包含嵌入图像的完整HTML.

  • 天才,虽然很令人不安. (10认同)

小智 5

来自https://github.com/phonegap/phonegap-iphone/issues/148:

NSURLCache* cache = [NSURLCache sharedURLCache];
[cache setMemoryCapacity:4 * 1024 * 1024];
[cache setDiskCapacity:512*1024];

[NSURLRequest requestWithURL:appURL
                 cachePolicy:NSURLRequestReturnCacheDataElseLoad
             timeoutInterval:10.0];
Run Code Online (Sandbox Code Playgroud)


sea*_*anb 1

与普通计算机相比,ihone 的缓存容量有限。它将未压缩的缓存项限制为 25k。

这里有很好的信息:http ://yuiblog.com/blog/2008/02/06/iphone-cacheability/