我继承了 NSURLCache 并覆盖– cachedResponseForRequest:
了– storeCachedResponse:forRequest:
. 我将所有文件存储在应用程序的文档目录中。
现在,问题是,.html 文件在打开时不会加载所有资源(即图像、js 和 css)。我不知道问题出在哪里,因此我在同一个网页上做了一个“页面另存为”,并比较了两个 .html 文件(我从浏览器保存的文件和我缓存的文件。)。
发现浏览器保存的html文件中,所有图片等文件源路径都被替换为本地路径了。。
<div><img src="./CNN.com International - Breaking, World, Business, Sports, Entertainment and Video News_files/footer_cnn_logo.png" width="23" height="11" alt="" border="0" class="cnn_ie6png">
但是我缓存的html文件仍然有网站的url..
<div><img src="http://i.cdn.turner.com/cnn/.e/img/3.0/global/footer/pngs/footer_cnn_logo.png" width="23" height="11" alt="" border="0" class="cnn_ie6png"/>
那么我该如何更改它..?或者将网页与所有资源一起保存的正确方法是什么..?
我正在保存所有文件,storeCachedResponse:forRequest:
因为它是按原样进行的。那么我是否必须在保存之前对这个 .html 文件进行一些修改,以便它可以正确引用本地文件夹中的所有资源路径??
仅供参考,我不想使用 ASIWebPageRequest (在 ios 上下载并缓存整个网页)
//////////// 编辑 ////////////
因此,正如 Edwin Vermeer 所回答的那样,我能够从我的缓存中获取正确的本地文件并返回响应。但看起来, UIWebView 不理解该数据..!这就是在方法中返回响应的cachedResponseForRequest:
方式
if (shouldFetchFromCache) {
NSData* content = [NSData dataWithContentsOfFile:storagePath];
NSDictionary *headers = @{@"Access-Control-Allow-Origin" : @"*", @"Access-Control-Allow-Headers" : @"Content-Type"};
NSHTTPURLResponse *urlresponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL statusCode:200 HTTPVersion:@"1.1" headerFields:headers];
cachedresponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:content];
}
return cachedresponse;!
这就是网页在 webView 上加载的方式..
是否有一些不同的方式来返回响应......?顺便说一句,内容或响应都不是零。
请求 url 的一个例子是
Request : http://z.cdn.turner.com/cnn/tmpl_asset/static/intl_homepage/1021/js/intlhplib-min.js
其存储的文件路径是:
file path: /Users/akshay/Library/Application Support/iPhone Simulator/5.1/Applications/86ED671C-AE45-449A-A2E1-D08281AB54CF/Documents/CVWebCache/cnn/tmpl_asset/static/intl_homepage/1021/js/intlhplib-min.js