我的iPhone应用程序中有一个webview,我的Resources文件夹中也有一些html文件。当我的应用加载时,我将一个页面从我的资源加载到我的webview中。但是,我需要在我的webview中创建指向其他一些资源的链接(例如,图像或其他html文件)。只是做一个相对链接不起作用:
<a href="OtherPage.html">Doesn't work</a>
答案 0 :(得分:26)
根据iPhone SDK Release Notes for iPhone OS 3.0显然有一点问题:
问题: UIWebView无法在针对3.0构建的应用中加载本地资源。
使用
[UIWebView loadHTMLString:baseURL:]
时,HTML 字符串不应该引用本地 具有file://
方案的资源。 相反,传入NULL
或file://
baseURL:
的网址,或包含 资源直接在HTML中使用<style>
和<script>
代码。
足够公平。但是传递file://
的标准问题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和图像仅由文件名引用,这就应该在涉及loadHTMLString:baseURL:
的iPhone OS 3.0中实现!
答案 1 :(得分:14)
加载这些资源时,需要设置基本URL。您可以使用以下方法执行此操作:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
...其中baseURL将是资源文件夹的文件URL。
答案 2 :(得分:7)
我修好了:我把它用于BaseURL就像August说的那样:
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
谢谢!
答案 3 :(得分:3)
此代码将返回一个字符串,其中包含捆绑包资源目录中名为“OtherPage.html”的文件的URL。
[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]
答案 4 :(得分:2)
这对我有用。我的HTML文件位于项目的子文件夹(而不是组)中。我的html页面叫做page01,子文件夹是html:
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *pathToHtml = @"html";
NSURL *baseURL = [[NSURL alloc] initFileURLWithPath:pathToHtml isDirectory:YES];
NSString *html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"page01" ofType:@"html"
inDirectory:@"html"]
encoding:NSUTF8StringEncoding error:nil];
[webview loadHTMLString:html baseURL:baseURL];
答案 5 :(得分:1)
首先尝试加载OtherPage.html。如果你不能那么它就不存在了,你错过了将它添加到项目中的一部分。如果可以,那么链接中可能只有拼写错误,或者如8月所述,baseURL可能不正确。当我创建一个包含资源文件中的图像的html文件时,它只使用
工作正常<img src="file.png">
答案 6 :(得分:0)
看看Phonegap是如何做到的。 Here's their tutorial on local resources on the iPhone。第11步可能是你忽略的。
答案 7 :(得分:0)
也许它确实与baseurl有关:当我加载资源时,我使用这一行:
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
最后看,它说baseURL:“”。如果我把它拿出来,它不起作用(崩溃),但我不知道我的资源的路径。如果有人做.....?
答案 8 :(得分:0)
对我来说问题是js文件没有包含在捆绑包中。一定要检查一下。
答案 9 :(得分:0)
好的,这里在3。5年后:) ...完全尝试了迈克尔盖洛德的建议,但它不适用于5.0,5.1,6.0,6.1的sims,也不适用于运行相同的真实设备。 然而这个关于资源捆绑在哪里的澄清(Where is build output going?)有助于让它对我有用:
确保项目通过以下方式识别它应该在捆绑中:
所以我所要做的就是复制 - 将Michael的代码粘贴到 verbatum 之上并更改这一行:
inDirectory:@"html"]
为:
inDirectory:nil]
和 Shaazam !它起作用了:))