我的iPhone应用程序中有一个webview,我的Resources文件夹中也有一些html文件.当我的应用加载时,我将一个页面从我的资源加载到我的webview中.但是,我需要在我的webview中创建指向其他一些资源的链接(例如,图像或其他html文件).只是做一个相对链接不起作用:
Doesn't work
Joe D'Andrea.. 26
显然,根据适用于iPhone OS 3.0的iPhone SDK发行说明,有一些问题:
问题: UIWebView无法在针对3.0构建的应用程序中加载本地资源.
使用时
[UIWebView loadHTMLString:baseURL:]
,HTML字符串不应引用具有该file://
方案的本地资源.相反,在传递NULL
或file://
对网址baseURL:
,或直接在HTML资源和
标签.
很公平.但传递标准问题file://
URL baseURL
并不常用.但是......事实证明,如果你/
改为//
和空格%20
,你将被设定!(使用%20
很有意义,但双斜线部分让我感到意外.)
假设你已经NSString *markup
设置好了.这就是你所做的一切.(为了便于阅读,我在这里包装了代码.您可能希望重构/调整品味.)
NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath] stringByReplacingOccurrencesOfString:@"/" withString:@"//"] stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; [webView loadHTMLString:markup baseURL:[NSURL URLWithString: [NSString stringWithFormat:@"file:/%@//", resourcePath]]];
只要您的CSS,JavaScript和图像仅通过文件名引用,这应该可以解决iPhone OS 3.0中loadHTMLString:baseURL:
的问题!
显然,根据适用于iPhone OS 3.0的iPhone SDK发行说明,有一些问题:
问题: UIWebView无法在针对3.0构建的应用程序中加载本地资源.
使用时
[UIWebView loadHTMLString:baseURL:]
,HTML字符串不应引用具有该file://
方案的本地资源.相反,在传递NULL
或file://
对网址baseURL:
,或直接在HTML资源和
标签.
很公平.但传递标准问题file://
URL baseURL
并不常用.但是......事实证明,如果你/
改为//
和空格%20
,你将被设定!(使用%20
很有意义,但双斜线部分让我感到意外.)
假设你已经NSString *markup
设置好了.这就是你所做的一切.(为了便于阅读,我在这里包装了代码.您可能希望重构/调整品味.)
NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath] stringByReplacingOccurrencesOfString:@"/" withString:@"//"] stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; [webView loadHTMLString:markup baseURL:[NSURL URLWithString: [NSString stringWithFormat:@"file:/%@//", resourcePath]]];
只要您的CSS,JavaScript和图像仅通过文件名引用,这应该可以解决iPhone OS 3.0中loadHTMLString:baseURL:
的问题!
加载这些资源时,需要设置基本URL.您可以使用以下方法执行此操作:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
...其中baseURL将是您的资源文件夹的文件URL.
我解决了这个问题:我把它用于BaseURL就像八月所说:
NSString *path = [[NSBundle mainBundle] bundlePath]; NSURL *baseURL = [NSURL fileURLWithPath:path];
谢谢!