UIWebView从远程html引用本地资源

时间:2013-03-24 21:25:52

标签: ios uiwebview resources

F.e。我们有来自http://blabla/index.html的加载页面的UIWebView,我希望它加载一些本地资源(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 个答案:

答案 0 :(得分:2)

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

  1. 加载下载HTML,然后使用loadHTMLString加载它,使用baseURL本地文件系统。当URL是服务器端URL时,我没有成功加载本地资源。我一直不得不下载HTML并直接加载它。

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

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

  4. 因此,我的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文件夹中,我认为它是等价的。只需确保所有本地引用都指向本地文件系统中的相对目录,并且所有服务器请求都是完全限定的。