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