WebView加载本地文件可以使用加载数据的方式
1. NSData 本地文件对应的数据
2. MIMEType
3. 编码格式字符串
4. 相对地址,一般加载本地文件不使用,可以在指定的baseURL中查找相关文件
如果要用UIWebView显示对应的文件,必须知道准确的MIMEType
但是,不是所有格式的文件都可以通过本地数据的方式加载,即便是知道MIMEType
UIWebView加载内容的三种方式:
1. 加载本地数据文件
需要制定文件的MIMEType
编码格式使用@"UTF-8"
2. 加载html字符串
可以加载全部或者部分hmtl字符串
3. 加载NSURLRequest
前面两步与NSURLConnection一致
使用HTML5开发应用
优势:
1. 跨平台
2. 审批通过之后,就终身不需要审批,只需要在后台自己随时维护即可
弱势:
1. 没有办法利用硬件资源,加速剂、手势
2. 性能不好
部分显示html的功能,可以方便制作新闻客户端阅读部分的UI
常用加载方法:
loadRequest:
loadHTMLString:baseURL:
loadData:MIMEType:textEncodingName:baseURL:
常用导航方法:
goBack – 回退
goForward – 前进
reload - 重载
stopLoading - 取消载入内容
常用属性:
scalespageToFit – 自动对页面进行缩放以适应屏幕
dataDetectorTypes - 设定电话号码、网址、电子邮件和日期等文字变为链接文字
浏览器通过MIME标志符可以知道使用哪种插件读取相关文件
iOS可以直接调用js代码与页面通讯
1.创建UIWebVIew
UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:webView];
// 检测所有数据类型
[webView setDataDetectorTypes:UIDataDetectorTypeAll];
self.webView = webView;
2.UIWebView加载 html 字符串
// HTML5
// 直接加载HTML字符串,完整的html
NSString *str = @"<html><head><title>Hello</title></head><body><h1>Hello</h1><ul><li>123</li><li>321</li><li>1234567</li></ul></body></html>";
// 部分html
NSString *str1 = @"<h1>Hello</h1><ul><li>123</li><li>321</li><li>1234567</li></ul>";
[self.webView loadHTMLString:str1 baseURL:nil];
NSString *path = [[NSBundle mainBundle]pathForResource:@"iOS6Cookbook.pdf" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
NSLog(@"%@", [self mimeType:url]);
// 以二进制数据的形式加载沙箱中的文件
NSData *data = [NSData dataWithContentsOfFile:path];
[self.webView loadData:data MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil];
- (void)loadText
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"关于.txt" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
NSLog(@"%@", [self mimeType:url]);
NSData *data = [NSData dataWithContentsOfFile:path];
[self.webView loadData:data MIMEType:@"text/plain" textEncodingName:@"UTF-8" baseURL:nil];
}
5.UIVIewView 加载本地 html 文件
- (void)loadHTML
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"demo.html" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
NSLog(@"%@", [self mimeType:url]);
// 以二进制数据的形式加载沙箱中的文件
NSData *data = [NSData dataWithContentsOfFile:path];
[self.webView loadData:data MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:nil];
}
6. 获取指定 URL 的 MIMEType 类型
- (NSString *)mimeType:(NSURL *)url
{
// 1. NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 2. NSURLConnection
// 从NSURLResponse可以获取到服务器返回的MIMEType
// 使用同步方法获取MIMEType
NSURLResponse *response = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
return response.MIMEType;
}
#pragma mark 后退
- (void)goBack
{
NSLog(@"后退");
[self.webView goBack];
}
#pragma mark 前进
- (void)goForward
{
NSLog(@"前进");
[self.webView goForward];
}
#pragma mark 刷新
- (void)refresh
{
NSLog(@"刷新");
[self.webView reload];
}
UIWebViewDelegate代理方法
// 网页开始加载的时候调用
- (void)webViewDidStartLoad:(UIWebView *)webView
// 网页加载完成的时候调用
- (void)webViewDidFinishLoad:(UIWebView *)webView
// 网页加载出错的时候调用
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
// 网页中的每一个请求都会被触发这个方法,返回NO代表不执行这个请求(常用于JS与iOS之间通讯)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
UIWebVIew调用js
// 获取当前页面的url
NSString *url = [_webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];
NSLog(@"url %@", url);
// 获取当前页面的标题
NSString *title = [_webView stringByEvaluatingJavaScriptFromString:@"document.title"];
NSLog(@"title %@", title);
// 提交表单
[_webView stringByEvaluatingJavaScriptFromString:@"document.forms[0].submit(); "];
修改UIWebVIew字体大小
- - (void)webViewDidFinishLoad:(UIWebView *)webView方法中加入js代码
- NSString *str = @"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '60%'";
- [_webView stringByEvaluatingJavaScriptFromString:str];
- NSString *jsString = [[NSString alloc] initWithFormat:@"document.body.style.fontSize=%f;document.body.style.color=%@",fontSize,fontColor];
- [webView stringByEvaluatingJavaScriptFromString:jsString];
NSString *js_fit_code = [NSString stringWithFormat:@"var meta = document.createElement('meta');"
"meta.name = 'viewport';"
"meta.content = 'width=%f, initial-scale=%f, minimum-scale=0.1,maximum-scale=1.0, user-scalable=yes';"
"document.getElementsByTagName('head')[0].appendChild(meta);",_webView.frame.size.width,_webView.frame.size.width/1000];
[_webView setScalesPageToFit:YES];