【问题标题】:UIWebView baseURL and absolute pathUIWebView baseURL 和绝对路径
【发布时间】:2012-06-29 09:59:24
【问题描述】:

我有一个这样构造的 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];

css 没有加载,当我用 NSURLProtocol 拦截对样式表的请求时,我可以看到请求是错误的。它正在尝试请求:

file:///style.css

而不是完整的 baseURL。现在我可以通过删除html文件中/style.css前面的/来解决这个问题。但是有没有一种简单的方法可以在不修改 html 的情况下在本机代码中解决这个问题?

【问题讨论】:

  • 这正是我正在使用的(见内容)
  • 你试过把 '/' 从 NSURL *test = [NSURL ....... 行的末尾去掉吗?您可能会出现双斜线情况,这可能导致它默认为用户位置,只是一个想法。
  • OK 在最后一次尝试中,尝试我提供的答案。它应该可以工作,因为我在自己的应用程序中使用了这种方法来使用相对路径显示大量图像。唯一的区别是在我的 HTML 文件名前面没有斜杠,这确实意味着您的“/style.css”必须更改为“style.css”。你有理由这么反对吗???
  • 不,我反对删除前面的 / 并没有什么特别的原因,但 HTML 不是我创建的。所以我想看看是否有办法在本机中解决这个问题,所以我不得不打扰创建者删除 /
  • 旁注:您可以使用pathForResource:ofType:NSBundle 获取本地URI,然后在您自己的HTML 中使用file://&lt;local_uri&gt; 进行引用。例如,对于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:@"&lt;some_html&gt;&lt;script type=\"text/javascript\" src=\"%@\"&gt;&lt;/script&gt;&lt;/some_html&gt;", jQueryUri];。最后:[myWebView loadHTMLString:html baseURL:nil];

标签: html uiwebview base-url


【解决方案1】:

通过以下方式生成路径和基本 url:

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

关于该主题的精彩博客:

http://iphoneincubator.com/blog/windows-views/uiwebview-revisited

关于该主题的 SO QA

UIWebView and local css file

【讨论】:

  • 删除斜线是唯一的解决方案,仍然非常感谢您至少尝试提供帮助:)
  • 我有点以为会是这样,但在您尝试组合之前……抱歉,没有适合您需求的解决方案。
【解决方案2】:

删除斜线是唯一的解决方案

【讨论】:

  • 但是一旦应用程序上线并且不再驻留在该特定路径的模拟器中,您就会遇到问题......无论应用程序位置如何,trumpetlicks 解决方案都是有效的。
  • 应该仍然可以在 webview 中使用绝对路径。您需要实现自定义 NSURLProtocol。虽然它需要大量代码,但我正在寻找一种简单的方法来处理这个问题。一旦我找到它。我会在这里发布。
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 2011-05-24
  • 2013-07-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
相关资源
最近更新 更多