您的位置:首页 > 移动开发

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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: