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

<a href="OtherPage.html">Doesn't work</a>
有帮助吗?

解决方案

在加载这些资源,则需要设置的基本URL。可以使用该方法做到这一点:

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL

...其中,将基本URL是你的资源文件夹中的文件的URL。

其他提示

显然,根据 iPhone OS 3.0 的 iPhone SDK 发行说明:

问题: 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 和图像仅通过文件名引用,这应该可以在 iPhone OS 3.0 中实现,其中 loadHTMLString:baseURL: 被关注到!

我固定它:我用这个对等的BaseURL八月表示:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];

谢谢!

此代码将返回一个字符串用在束的资源目录中名为“OtherPage.html”文件的URL。

[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]

这为我工作。我的HTML文件是在我的项目的子文件夹(非团体)。我的HTML页被称为页01和子文件夹是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];

尝试第一加载OtherPage.html。如果你不能那么它不存在,你已经错过了将它添加到项目中的某些部分。如果可以的话,那么有可能只是在链接一个错字,或可基本URL是不正确的,如8月声明。当我创建了它的图像,是在资源文件的HTML文件,它工作得很好只是用

<img src="file.png">

看看PhoneGap的是怎么做的。 这里是他们的iPhone上的本地资源教程。第11步可能是你忽略了什么。

也许它确实有一些做的baseURL时:当我加载资源,我用这个行:

[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];

看在端部,它说基本URL:“”。如果我参加了这一点,它不工作(崩溃),但我不知道的路径,我的资源。如果有人确实.....?

有关我的问题是,JS文件没有包括在该束。请务必检查。

好吧,这里3.5年后:)...试着迈克尔*盖洛德的建议上述准确,但它没有工作,在sims为5.0,5.1,6.0,6.1-也没有在实际运行的设备相同。 然而 这因此说明在资源有捆绑( 哪里是建立出去? )帮助使它的工作对我来说是这样的:

  1. 创建一种搜索文件夹中的项目(迈克尔*表明-而我还没有尝试'集团')
  2. 把你html文件夹中使用搜索
  3. 在模式的使用 文件 -> 添加的文件项目
  4. 确保项目承认,它应该在的束:

    1. 右击的主要项目目标在 导航仪 窗口,
    2. 确保目标是选择, 建造阶段 标签,
    3. 复制捆绑的资源 三角形啄|>
    4. 这里有什么不同迈克尔 -它应该已经显示你html文件和路径。(也许XCoders有所改善的增加文件AI:)

所以我不得不这样做的就是制迈克尔的代码以上 verbatum 并改变这一行:

                     inDirectory:@"html"] 

为:

                     inDirectory:nil]

Shaazam !它的工作:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top