ios - UIWebView从远程html引用本地资源

标签 ios uiwebview resources

F.e.我们有 UIWebView,其中加载了来自 http://blabla/index.html 的页面,我希望它加载一些本地资源(js/bridge.js、css/main.css,...)。 所以 html 会像

<head>
<script src="file:///.../js/bridge.js"></script>
</head>

但是我到底应该如何引用本地资源呢?也许我应该打开本地 httpd 并像 http://127.0.0.1/js/bridge.js 那样引用它?

最佳答案

根据我的经验,如果您想要混合本地和网络资源,您必须:

  1. 加载下载 HTML,然后使用本地文件系统的 baseURL 使用 loadHTMLString 加载它。当 URL 是服务器端 URL 时,我无法成功加载本地资源。我总是必须下载 HTML 并直接加载。

  2. 所有网络来源都需要完全合格(即使用“http://...”)。由于我们要将基本 URL 设置为本地文件系统,因此服务器代码上的本地 URL 引用将不起作用。他们必须完全合格。

  3. 任何 iPhone 本地源都可以在本地引用(即没有任何 file://http:// 前缀),或者您可以传递基本 URL 作为 HTTP REQUEST 参数,并执行服务器端脚本来嵌入此唯一 URL。

因此,我的 iOS 代码如下所示:

// get my bundle local URL

NSURL *bundleUrl = [[NSBundle mainBundle] bundleURL];

// download the html from the server

NSData *data = [NSData dataWithContentsOfURL:url]; 
NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

// load that html into my web view using a the bundle as the base URL

[self.webView loadHTMLString:html baseURL:bundleUrl];

因此,为了使其正常工作,我的 HTML 可能如下所示:

<html>
<body>
<table>
  <tr>
    <td>image from iOS file system using local reference</td>
    <td><img src="sample.png" /></td>
  </tr>
  <tr>
    <td>server image</td>
    <td><img src="http://myserverurl.com/sampleonserver.png" /></td>
  </tr>
</table>
</body>
</html>

这里我使用 img 标签,但我怀疑您的标签也是如此。我还假设您的本地引用位于 bundle 内,但如果它们位于 Documents 文件夹内,我认为这是等效的。只需确保所有本地引用都指向本地文件系统中的相对目录,并且所有服务器请求都是完全限定的。

关于ios - UIWebView从远程html引用本地资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604201/

相关文章:

ios - 为什么 UIWebView 无法在 Safari 中打开我的链接?

javascript - 特定的 UIWebView 选择(仅整个单词/句子)

Magento 覆盖客户资源模型

ios - UIWeb View iOS 5 : WebKit/JavaScriptCore crash

c# - Win32 资源编辑器库?

c# - 如何将元数据添加到 resx 文件

ios - Facebook ID 或 Cognito ID 或我的 iPhone 应用程序的替代方案

ios - iPad 应用程序首先进入纵向模式,然后在解锁锁定时处于横向模式的屏幕后进入横向模式

iphone - 我怎样才能等待进程树完成?

iphone - 如何在Objective-C中实现多级委托(delegate)