链接到WebView内的资源 - iPhone

时间:2009-01-26 01:53:05

标签: iphone html resources hyperlink webview

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

<a href="OtherPage.html">Doesn't work</a>

10 个答案:

答案 0 :(得分:26)

根据iPhone SDK Release Notes for iPhone OS 3.0显然有一点问题:

  

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

     

使用[UIWebView loadHTMLString:baseURL:]时,HTML   字符串不应该引用本地   具有file://方案的资源。   相反,传入NULLfile://   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?)有助于让它对我有用:

  1. 在项目中创建一个Finder文件夹(正如迈克尔建议的那样 - 我也没有尝试'组')
  2. 使用Finder将您的html放在该文件夹中
  3. Xcode中的
  4. 使用文件 - &gt; 将文件添加到项目
  5. 确保项目通过以下方式识别它应该在捆绑中:

    1. 右键单击 Navigator 窗口中的主项目目标
    2. 确保选择TARGETS, Build Phases 标签,
    3. 点击复制捆绑资源三角形东西|&gt;
    4. 并且 - 这里有与Michael的不同 - 它应该已经显示了你的html文件和路径。 (也许XCoders改进了添加文件AI :)。
  6. 所以我所要做的就是复制 - 将Michael的代码粘贴到 verbatum 之上并更改这一行:

                         inDirectory:@"html"] 
    

    为:

                         inDirectory:nil]
    

    Shaazam !它起作用了:))