天天看点

OC与JS交互前言-b

UIWebView提供了三个方法来加载html资源

1. loadHTMLString:baseURL: 把html文件的内容以字符串的形式加载到webView里面,然后解析。编码为UTF8

<col>

1

2

3

​<code>​NSString​</code>​ ​<code>​*filePath = [[​</code>​​<code>​NSBundle​</code>​ ​<code>​mainBundle] pathForResource:@​</code>​​<code>​"index"​</code>​ ​<code>​ofType:@​</code>​​<code>​"html"​</code>​​<code>​];​</code>​

​<code>​NSURL​</code>​ ​<code>​*baseURL = [[​</code>​​<code>​NSBundle​</code>​ ​<code>​mainBundle] bundleURL];​</code>​

​<code>​[​</code>​​<code>​self​</code>​​<code>​.webView loadHTMLString:[​</code>​​<code>​NSString​</code>​ ​<code>​stringWithContentsOfFile:filePath encoding:​</code>​​<code>​NSUTF8StringEncoding​</code>​ ​<code>​error:​</code>​​<code>​nil​</code>​​<code>​] baseURL:baseURL];​</code>​

2. loadData:MIMEType:textEncodingName:baseURL: 把html文件的内容以二进制的形式加载到webView里面,然后解析。MIMETYPE指定html文件的格式为"text/html",编码为UTF8

4

​<code>​NSData​</code>​ ​<code>​*data = [​</code>​​<code>​NSData​</code>​ ​<code>​dataWithContentsOfFile:filePath];​</code>​

​<code>​[​</code>​​<code>​self​</code>​​<code>​.webView loadData:data MIMEType:@​</code>​​<code>​"text/html"​</code>​ ​<code>​textEncodingName:@​</code>​​<code>​"UTF-8"​</code>​ ​<code>​baseURL:baseURL];​</code>​

3. loadRequest:构造一个请求,webView以请求的形式加载本地html文件,然后解析。这种方式可以直接加载网络html

​<code>​NSURL​</code>​ ​<code>​*url = [​</code>​​<code>​NSURL​</code>​ ​<code>​fileURLWithPath:filePath];​</code>​

​<code>​NSURLRequest​</code>​ ​<code>​*request = [​</code>​​<code>​NSURLRequest​</code>​ ​<code>​requestWithURL:url];​</code>​

​<code>​[​</code>​​<code>​self​</code>​​<code>​.webView loadRequest:request];​</code>​

1. 上面加载html方式中的前两种都指定了一个baseURL,那么这个baseURL是干什么的?

iOS程序在运行的时候会把程序用到的资源文件copy到Bundle中,baseURL指定的目录就是Bundle的根目录

所以image,css,js资源,不管在项目里面放在哪个目录结构下,在HTML内引用的时候,都是直接根目录的

书写资源路径的时候,按照相对路径来理解,html和image,css,js可以看做是在同一个目录下

2. Xcode之前版本可能会把css,js文件当做编译资源而不是Bundle资源,这时可能会出现css,js没有效果

我们在Xcode中​<code>​Build Phases​</code>​下可以看到资源文件的存放位置,跟本次内容关联最大的有两项:​<code>​Compile Sources​</code>​和​<code>​Copy Bundle Resources​</code>​

查看确保资源位置放置正确即可修复这类问题