我正在与Drupal开发人员合作开发一个iPhone应用程序,该应用程序从Drupal站点获取部分内容,将其存储在文件系统中,并在UIWebView中本地显示。我们遇到了一些问题,我们正在寻找一个解决方案,无论是在Drupal还是在iPhone端。
-webView:shouldStartLoadWithRequest:navigationType:
链接用户点击,检查NSURLRequest是否包含从文档目录开始的URL,如果不包含则重定向。但是,这对页面资源没有帮助 - 例如CSS文件和图像。-loadRequest
方法似乎只有在它包含一个带有文件扩展名的文件的URL的NSURLRequest时才能工作。否则,我收到一个WebKitErrorDomain错误代码102:“帧加载中断”。有可能使用UIWebView的-loadHTMLString:baseURL:
计算解决方案,但是当用户点击链接时,该方法对代码非常不友好(我现在还不确定为什么)。忽略-release
条消息,我用来加载网页的代码是:
NSString *fileToLoad = [appDelegate.webContentDirectory stringByAppendingPathComponent:filename];
NSURL *url = [[NSURL alloc] initFileURLWithPath:fileToLoad isDirectory:NO];
NSURLRequest *newURLRequest = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:(NSTimeInterval)5];
[self.webView loadRequest:newURLRequest];
我对创造性思维持开放态度 - 例如有没有我可以在应用程序中设置的iPhone网络服务器,它会自动解决这两个问题?
答案 0 :(得分:0)
解决CSS /图像问题:当您从清单中下载文件时,可以将文件内容读入NSString
,将文档目录路径附加到css /图像文件的路径,然后只保存该字符串覆盖“旧”文件。
答案 1 :(得分:0)
很抱歉,如果我不完全明白你想做什么。但根据我的理解,您在本地缓存节点页面的HTML源,保留服务器端的所有资源(图像,CSS,JavaScript等)。
为什么不使用UIWebView的方法:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
参数是:
然后,UIWebView应无缝地加载任何资源。
答案 2 :(得分:0)
NSURLProtocol的子类化正是我们正在寻找的答案。在向系统注册我们的子类并将其配置为有选择地处理html请求(有效地覆盖我们认为合适的默认html协议处理程序)之后,我能够为每个请求加载我想要的任何内容。本质上,我将http请求重定向到缓存内容中的加载文件。
对于任何感兴趣的人,答案来自这个非常有趣的问题:Allow UIWebView to load http://localhost:port/path URIs without an Internet connection