链接到WebView内的资源 - iPhone

Isa*_*ler 18 html iphone resources hyperlink webview

我的iPhone应用程序中有一个webview,我的Resources文件夹中也有一些html文件.当我的应用加载时,我将一个页面从我的资源加载到我的webview中.但是,我需要在我的webview中创建指向其他一些资源的链接(例如,图像或其他html文件).只是做一个相对链接不起作用:

<a href="OtherPage.html">Doesn't work</a>
Run Code Online (Sandbox Code Playgroud)

Joe*_*rea 26

显然,根据适用于iPhone OS 3.0iPhone SDK发行说明,有一些问题:

问题: UIWebView无法在针对3.0构建的应用程序中加载本地资源.

使用时[UIWebView loadHTMLString:baseURL:],HTML字符串不应引用具有该file://方案的本地资源.相反,在传递NULLfile:// 对网址baseURL:,或直接在HTML资源 <style><script>标签.

很公平.但传递标准问题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]]];
Run Code Online (Sandbox Code Playgroud)

只要您的CSS,JavaScript和图像仅通过文件名引用,这应该可以解决iPhone OS 3.0中loadHTMLString:baseURL:的问题!


Aug*_*ust 14

加载这些资源时,需要设置基本URL.您可以使用以下方法执行此操作:

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
Run Code Online (Sandbox Code Playgroud)

...其中baseURL将是您的资源文件夹的文件URL.


Isa*_*ler 7

我解决了这个问题:我把它用于BaseURL就像八月所说:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
Run Code Online (Sandbox Code Playgroud)

谢谢!