UIWebView baseURL和绝对路径

6

我有一个像这样构建的HTML页面:

<html>
  <head>
    <link rel="stylesheet" href="/style.css" />
  </head>
  <body>

  </body>
</html>

它存储在我的文档目录中:

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/12345-ID/Documents/mysite/index.html

我也将style.css存储在文档目录中:

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/12345-ID/Documents/mysite/style.css

但现在,当我尝试通过以下方式将HTML加载到我的 webview 中时:
NSURL *test = [NSURL URLWithString:@"file:///Users/username/Library/Application Support/iPhone%20Simulator/5.1/Applications/12345-ID/Documents/mysite/"]
[myWebView loadHTMLString:<the content retrieved from index.html> baseURL:test];

当我使用NSURLProtocol拦截样式表请求时,发现CSS未加载,可以看到请求是错误的。它试图请求:
file:///style.css
而不是完整的基本URL。现在,我可以通过在HTML文件中删除/style.css前面的/来解决这个问题。但是,在不修改HTML的情况下,是否有一种简单的方法在本地代码中解决这个问题?

这正是我正在使用的(请参见内容) - Thizzer
你尝试过在NSURL *test = [NSURL .......这一行结尾去掉'/'吗?你可能遇到了双斜杠的情况,这可能导致它默认为用户位置。只是一个想法。 - trumpetlicks
在最后一次尝试中,请尝试我提供的答案。它应该可以工作,因为我在自己的应用程序中使用了这种方法来显示大量使用相对路径的图像。唯一的区别是在我的HTML中,我没有在文件名前面加斜杠,这意味着你的“/style.css”必须更改为“style.css”。你反对这个有什么原因吗? - trumpetlicks
没有特别的原因让我反对去掉斜线,但是这个 HTML 并不是由我创建的。所以我想看看是否有一种本地的解决方法,这样我就不必麻烦创建者去除斜线了。 - Thizzer
附注:您可以使用 NSBundle 中的 pathForResource:ofType: 获取本地 URI,然后在自己的 HTML 中引用 file://<local_uri>。例如,对于 jquery-2.1.1.min.js,我使用:NSString *jQueryFile = [[NSBundle mainBundle] pathForResource:@"jquery-2.1.1.min" ofType:@"js"]; NSString *jQueryUri = [@"file://" stringByAppendingString:jQueryFile]; 然后我只需将其添加到我的 HTML 中:NSString *html = [NSString stringWithFormat:@"<some_html><script type=\"text/javascript\" src=\"%@\"></script></some_html>", jQueryUri];。最后:[myWebView loadHTMLString:html baseURL:nil]; - Alejandro Iván
2个回答

12

删除斜杠是唯一的解决方案,仍然非常感谢您至少尝试帮助 :) - Thizzer
我有点觉得那会是这种情况,但在尝试各种组合之前......很抱歉没有找到适合您需求的解决方案。 - trumpetlicks

2
去掉斜杠是唯一的解决方案。

但是,一旦应用程序上线并且不再驻留在模拟器的特定路径中,您将面临问题... trumpetlicks的解决方案无论应用程序的位置如何都是有效的。 - darwin
在webview中仍然可以使用绝对路径。您需要实现自定义NSURLProtocol。虽然它需要大量的代码,所以我正在寻找一种简单的处理方法。一旦我找到了,我会在这里发布。 - Piotr Czapla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接