是否可以缓存加载在iPhone UIWebView中的资源?
我有一个简单的应用程序加载在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
。
与普通电脑相比,ihone的缓存容量有限。它将未压缩的缓存项限制为25k。
良好的信息在这里:http://yuiblog.com/blog/2008/02/06/iphone-cacheability/
您可以随时手动执行的请求,尽管这会是棘手 - 然后你可以缓存的东西到你的心脏的内容。构建一个UIWebViewDelegate
,在webView:shouldStartLoadWithRequest:navigationType:
中启动请求,缓存结果,并使用UIWebView的loadHTMLString:baseURL:
更新视图。
这将是丑陋的,事情不会那样顺利,你可能想工作,但它可能是配不上你所需要的。这个问题的
一个解决办法,因为我看到的是
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,只要你想。
您现在可以通过所有眼看互动尝试ASIWebPageRequest
:
ASIWebPageRequest是一个新的实验除了ASIHTTPRequest家庭。它可以用来下载一个完整的网页,包括像一个请求中的图像和样式表等外部资源。 下载网页后,请求将解析内容,查找外部资源,下载它们,并使用Data URIS直接将它们插入到html源代码中。然后,您可以将响应直接放入Mac上的UIWebView/WebView。
我只能建议大家使用Ben Copsey伟大的库来处理各种HTTP操作。
UPDATE:本已经停止ASIHTTPRequest。我不再建议使用它。
从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];
你应该能够继承NSURLCache
并用它替换由UIWebView
使用的共享缓存与爱情篇文章中可可描述:Substituting local data for remote UIWebView requests
对于另一种方法已看看Drop-in offline caching for UIWebView (and NSURLProtocol)。
天才,虽然相当令人不安。 – 2010-02-11 15:18:29
做错的最好方法。男人,我们在这里寻找至少更方便的解决方案 – 2013-10-18 07:38:27
@ eagle.dan.1349为什么这是做错的最好方法?在没有“更方便的解决方案”的情况下,*是最方便的解决方案 – abbood 2013-11-13 14:43:18