Load resources from relative path using local html in uiwebview

I have a very simple iOS app with a uiwebview loading a very simple test page (test.html):

<html>
<body>
<img src="img/myimage.png" />
</body>
</html>

I load this test.html file into my web view:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadHTMLString:html baseURL:baseUrl];

This works fine if I reference the image without the relative path and put the referenced image in the root path under Targets -> Copy Bundle Resources within XCode, however I can't get it to work with the relative path as shown in my html file. There must be a way to do this, I have lots of images, css, javascript files that I want to load into the webview and I would like not to have to have everything in the root and have to change all the references in my web app.


This is how to load/use a local html with relative references.

  • Drag the resource into your xcode project (I dragged a folder named www from my finder window), you will get two options "create groups for any added folders" and "create folders references for any added folders".
  • Select the "create folder references.." option.
  • Use the below given code. It should work like a charm.

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www"]];
    [webview loadRequest:[NSURLRequest requestWithURL:url]];

  • Now all your relative links(like img/.gif, js/.js) in the html should get resolved.

    Swift 3

        if let path = Bundle.main.path(forResource: "dados", ofType: "html", inDirectory: "root") {
            webView.load( URLRequest(url: URL(fileURLWithPath: path)) )
        }
    

    在Swift中:

     func pathForResource(  name: String?, 
                            ofType ext: String?, 
                            inDirectory subpath: String?) -> String?  {
    
      // **name:** Name of Hmtl
      // **ofType ext:** extension for type of file. In this case "html"
      // **inDirectory subpath:** the folder where are the file. 
      //    In this case the file is in root folder
    
        let path = NSBundle.mainBundle().pathForResource(             "dados",
                                                         ofType:      "html", 
                                                         inDirectory: "root")
        var requestURL = NSURL(string:path!)
        var request = NSURLRequest(URL:requestURL)
    
        webView.loadRequest(request)
    }
    

    我把所有东西塞进一条线(坏的我知道)并且没有任何麻烦:

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" 
                                                                                                             ofType:@"html"]
                                                                 isDirectory:NO]]];         
    
    链接地址: http://www.djcxy.com/p/34862.html

    上一篇: 我如何将NSAppTransportSecurity添加到我的info.plist文件中?

    下一篇: 在uiwebview中使用本地html从相对路径加载资源