UIWebView的基本使用

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];


3.UIWebView 加载 pdf 文件

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加载本地文本文件
- (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字体大小

  1. - (void)webViewDidFinishLoad:(UIWebView *)webView方法中加入js代码  
  2.     NSString *str = @"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '60%'";  
  3.     [_webView stringByEvaluatingJavaScriptFromString:str];  
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSString *jsString = [[NSString alloc] initWithFormat:@"document.body.style.fontSize=%f;document.body.style.color=%@",fontSize,fontColor];   
  2.         [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];






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值