UIWebView
2016-01-14 19:21
323 查看
m
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
[objc]
view plaincopy
常用加载方法:
loadRequest:
loadHTMLString:baseURL:
loadData:MIMEType:textEncodingName:baseURL:
常用导航方法:
goBack – 回退
goForward – 前进
reload - 重载
stopLoading - 取消载入内容
常用属性:
scalespageToFit – 自动对页面进行缩放以适应屏幕
dataDetectorTypes - 设定电话号码、网址、电子邮件和日期等文字变为链接文字
浏览器通过MIME标志符可以知道使用哪种插件读取相关文件
iOS可以直接调用js代码与页面通讯
1.创建UIWebVIew
[objc]
view plaincopy
UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:webView];
// 检测所有数据类型
[webView setDataDetectorTypes:UIDataDetectorTypeAll];
self.webView = webView;
2.UIWebView加载html字符串
[objc]
view plaincopy
// 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];
3.UIWebView加载pdf文件
[objc]
view plaincopy
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];
4.UIWebView加载本地文本文件
[objc]
view plaincopy
- (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文件
[objc]
view plaincopy
- (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类型
[objc]
view plaincopy
- (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;
}
[objc]
view plaincopy
#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代理方法
[objc]
view plaincopy
// 网页开始加载的时候调用
- (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
[objc]
view plaincopy
// 获取当前页面的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];
[objc] view
plaincopy
NSString *jsString = [[NSString alloc] initWithFormat:@"document.body.style.fontSize=%f;document.body.style.color=%@",fontSize,fontColor];
[webView stringByEvaluatingJavaScriptFromString:jsString];
[objc]
view plaincopy
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];
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
[objc]
view plaincopy
常用加载方法:
loadRequest:
loadHTMLString:baseURL:
loadData:MIMEType:textEncodingName:baseURL:
常用导航方法:
goBack – 回退
goForward – 前进
reload - 重载
stopLoading - 取消载入内容
常用属性:
scalespageToFit – 自动对页面进行缩放以适应屏幕
dataDetectorTypes - 设定电话号码、网址、电子邮件和日期等文字变为链接文字
浏览器通过MIME标志符可以知道使用哪种插件读取相关文件
iOS可以直接调用js代码与页面通讯
1.创建UIWebVIew
[objc]
view plaincopy
UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:webView];
// 检测所有数据类型
[webView setDataDetectorTypes:UIDataDetectorTypeAll];
self.webView = webView;
2.UIWebView加载html字符串
[objc]
view plaincopy
// 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];
3.UIWebView加载pdf文件
[objc]
view plaincopy
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];
4.UIWebView加载本地文本文件
[objc]
view plaincopy
- (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文件
[objc]
view plaincopy
- (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类型
[objc]
view plaincopy
- (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;
}
[objc]
view plaincopy
#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代理方法
[objc]
view plaincopy
// 网页开始加载的时候调用
- (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
[objc]
view plaincopy
// 获取当前页面的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];
[objc] view
plaincopy
NSString *jsString = [[NSString alloc] initWithFormat:@"document.body.style.fontSize=%f;document.body.style.color=%@",fontSize,fontColor];
[webView stringByEvaluatingJavaScriptFromString:jsString];
[objc]
view plaincopy
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];
相关文章推荐
- Android Lint工具 优化代码 <12>
- Swift语言教程中文文档
- 单例设计模式(iOS版)
- android sqlite 不存在插入,存在更新语句
- 倒计时持续震动,结束时停止震动 iOS
- Android性能优化典范(一)
- 从sd卡中显示一个图片 Android
- 【iOS开发】NSAttributedString和NSMutableAttributedString
- 【Android】Genymotion打开出现Unable to load VirtualBox engine
- android打开网页,使用手机浏览器
- 在Android studio 项目中使用 9patch常见问题解决
- Android 透明(沉浸)状态栏 各个版本的完全解决方案
- 在Appdelegate中获取当前的ViewController
- 实现类似微博@..的点击文字跳转事件 iOS
- Android JSON解析库的使用
- android动画,透明度渐变,图片移动
- 【Android应用界面编程】-----ExpendableListView
- iOS开发——MBProgressHUD
- Swift 学习 用 swift 调用 oc
- APP进去时的welcome界面