在uiwebview中使用本地html从相对path加载资源

我有一个非常简单的iOS应用程序加载一个非常简单的testing页面(test.html)的uiwebview:

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

我加载这个test.html文件到我的networking视图:

 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]; 

这工作正常,如果我引用没有相对path的图像,并把引用的图像在根目录path下XCode中的目标 – >复制束资源,但是我不能得到它与我的HTML文件中显示的相对path。 必须有一种方法来做到这一点,我有很多的图像,CSS,JavaScript文件,我想加载到Web视图,我不希望有根的一切,必须改变我的网站的所有引用应用程序。

这是如何加载/使用相对引用的本地HTML。

  1. 拖动资源到你的Xcode项目(我从我的发现者窗口拖动一个名为www的文件夹),你会得到两个选项“创build组添加文件夹”和“创build文件夹引用的任何添加文件夹”。
  2. select“创build文件夹引用..”选项。
  3. 使用下面给出的代码。 它应该像魅力一样工作。

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

现在,所有你的相对链接(如img / .gif,js / .js)在html应该得到解决。

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?
名称: Hmtl的名称;
typesext:文件types的扩展名。 在这种情况下,“HTML”;
inDirectory子path:文件所在的文件夹。 在这种情况下,该文件在根文件夹中;

  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]]]; 

我只是这样做:

  UIWebView *webView = [[[UIWebView alloc] init] autorelease]; NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]; NSURLRequest* request = [NSURLRequest requestWithURL:url]; [webView loadRequest:request]; 

其中“index.html”相对引用图片,CSS,JavaScript等

迅速回答2。

UIWebView类参考build议不要使用webView.loadRequest(request):

不要使用这个方法来加载本地的HTML文件; 相反,使用loadHTMLString:baseURL :.

在这个解决scheme中,html被读入一个string。 html的url用来处理path,并将其作为基础url传递。

 let url = bundle.URLForResource("index", withExtension: "html", subdirectory: "htmlFileFolder") let html = try String(contentsOfURL: url) let base = url.URLByDeletingLastPathComponent webView.loadHTMLString(html, baseURL: base) 

我已经回去testing,并重新testing了这一点,似乎唯一的方法,我可以得到它的工作(因为我有一些文件在img文件夹和一些在JS / CSS等)是不是在html中使用我的图像的相对path,并把一切都引用到bundle文件夹中。 多可惜 :(。

 <img src="myimage.png" /> 

@ sdbrain在Swift 3中的回答:

  let url = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "www")!) webView.loadRequest(NSURLRequest.init(url: url) as URLRequest) 

在Swift 3.01中使用WKWebView:

 let localURL = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "CWP")!) myWebView.load(NSURLRequest.init(url: localURL) as URLRequest) 

这调整了3.01中的一些更精细的语法变化,并保持目录结构,以便您可以embedded相关的HTML文件。