应用程序之UIWebView的使用
- UIWebView简介
- 知识点总结
- 代码实现
一、UIWebView简介
1.是iOS内置的浏览器控件,可以浏览网页、打开文档等
2.能够加载html/htm、pdf、docx、txt等格式的文件
3.系统自带的Safari浏览器就是通过UIWebView实现的
2.能够加载html/htm、pdf、docx、txt等格式的文件
3.系统自带的Safari浏览器就是通过UIWebView实现的
二、知识总结
1⃣️UIWebView是内置浏览器控件,能够加载html、pdf、txt等多种格式文件
2⃣️常用加载方法:
loadRequest:
loadHTMLString:baseURL:
loadData:MIMEType:textEncodingName:baseURL:
3⃣️常用导航方法:
goBack – 回退
goForward – 前进
reload - 重载
stopLoading - 取消载入内容
4⃣️常用属性:
scalespageToFit – 自动对页面进行缩放以适应屏幕
dataDetectorTypes - 设定电话号码、网址、电子邮件和日期等文字变为链接文字
浏览器通过MIME标志符可以知道使用哪种插件读取相关文件
5⃣️iOS可以直接调用js代码与页面通讯
2⃣️常用加载方法:
loadRequest:
loadHTMLString:baseURL:
loadData:MIMEType:textEncodingName:baseURL:
3⃣️常用导航方法:
goBack – 回退
goForward – 前进
reload - 重载
stopLoading - 取消载入内容
4⃣️常用属性:
scalespageToFit – 自动对页面进行缩放以适应屏幕
dataDetectorTypes - 设定电话号码、网址、电子邮件和日期等文字变为链接文字
浏览器通过MIME标志符可以知道使用哪种插件读取相关文件
5⃣️iOS可以直接调用js代码与页面通讯
三、代码实例
1⃣️图解
#import "ViewController.h" @interface ViewController () // 访问指定URL字符串的内容,仅由文本框事件调用 - (void)gotoURLString:(NSString *)urlString; // 访问指定的URL内容 - (void)gotoURL:(NSURL *)url; // 获得本地文件的MIMEType - (NSString *)MIMEType:(NSString *)fileName; @end @implementation ViewController #pragma mark - UIWebView加载内容的测试方法 // 加载HTML字符串 - (void)testLoadHTMLString { // 测试加载HTML字符串 NSString *html = @"<html><head><title>Hello</title></head><body><h1>Hello Itcast</h1></body></html>"; [_webView loadHTMLString:html baseURL:nil]; } // 加载部分HTML字符串测试 - (void)testLoadPartHTMLString { // 测试加载部分HTML字符串,不需要显示整个网页内容时,通常使用此方法 NSString *partHtml = @"<h1>Hello Itcast</h1>"; [_webView loadHTMLString:partHtml baseURL:nil]; } // 测试加载本地HTML文件 - (void)testLoadHTMLFile { // 测试加载本地HTML文件,需要指定MIMETYPE NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"demo" ofType:@"html"]; NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]resourcePath] isDirectory:YES]; // 只有加载的html文件才需要指定baseURL路径,告诉浏览器去哪里找图片、样式表等文件 [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:baseURL]; } // 加载本地PDF文件 - (void)testLoadPDFFile { // 测试加载本地PDF,需要指定MIMETYPE NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"001.网络基础" ofType:@"pdf"]; [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil]; } // 加载本地文本文件 - (void)testLoadTextFile { // 测试加载本地文本文件,需要指定MIMETYPE NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"关于" ofType:@"txt"]; [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"text/plain" textEncodingName:@"UTF-8" baseURL:nil]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self MIMEType:@"001.网络基础.pdf"]; [self testLoadHTMLFile]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - UITextField代理方法 // 文本框回车事件 - (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == _urlText && textField.text.length > 0) { [textField resignFirstResponder]; [self gotoURLString:textField.text]; } return YES; } #pragma mark - IBActions // 回退操作 - (IBAction)goBack:(id)sender { [_webView goBack]; } // 前进操作 - (IBAction)goForward:(id)sender { [_webView goForward]; } // 刷新 - (IBAction)reloadURL:(id)sender { [_webView reload]; } // 提交表单 - (IBAction)submit:(id)sender { // 获取当前页面的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(); "]; } #pragma mark - 访问指定URL内容 // 访问指定URL字符串的内容,仅由文本框事件调用,文本框回车时候调用的 - (void)gotoURLString:(NSString *)urlString { NSURL *url = nil; // 判断是否是httpURL if ([urlString hasPrefix:@"http://"]) { // URL中有中文的,是需要加百分号的! url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; } else if ([urlString hasPrefix:@"file://"]) { // 判断给定参数是否已经是完整的url路径,避免出现前进后退后,URL变成完整URL无法访问的情况 if ([urlString hasPrefix:@"file://localhost/"]) { // 注意此处不能使用fileURLWithPath方法 url = [NSURL URLWithString:urlString]; } else { // 如果没有localhost前缀的,说明是新输入的本地文件,需要转换url。 // 检测字串范围 NSRange range = [urlString rangeOfString:@"file://"]; // 截取剩余部分作为文件名 NSString *fileName = [urlString substringFromIndex:range.length]; // 生成文件路径 NSString *path = [[NSBundle mainBundle]pathForResource:fileName ofType:nil]; // 判断文件是否存在 if ([[NSFileManager defaultManager]fileExistsAtPath:path]) { url = [NSURL fileURLWithPath:path]; } else { url = nil; } } } // 判断输入是否正确 if (url == nil) { UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"输入地址不正确,请重新输入!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alert show]; // 设置文本框输入焦点 [_urlText becomeFirstResponder]; } else { // 访问指定的URL内容 [self gotoURL:url]; } } // 访问指定的URL内容 - (void)gotoURL:(NSURL *)url { // 使用URL字符串替代URL文本框 [_urlText setText:[url absoluteString]]; // 定义请求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 设置数据检测类型 [_webView setDataDetectorTypes:UIDataDetectorTypeAll]; // 加载请求 [_webView loadRequest:request]; } // 获得本地文件的MIMEType - (NSString *)MIMEType:(NSString *)fileName { // 定义路径 NSString *path = [[NSBundle mainBundle]pathForResource:fileName ofType:nil]; // 定义URL NSURL *url = [NSURL fileURLWithPath:path]; // 定义请求 NSURLRequest *request = [NSURLRequest requestWithURL: url]; // 定义响应 NSURLResponse *response = nil; // 发送同步请求 [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; NSLog(@"MIMEType is %@", [response MIMEType]); return [response MIMEType]; } #pragma mark - UIWebViewDelegate 代理方法 // 网页开始加载的时候调用 - (void)webViewDidStartLoad:(UIWebView *)webView { NSLog(@"开始加载"); } // 网页加载完成的时候调用 - (void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"加载完成"); } // 网页加载出错的时候调用 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"加载出错%@", [error localizedDescription]); } // 网页中的每一个请求都会被触发这个方法,返回NO代表不执行这个请求(常用于JS与iOS之间通讯) - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"将要加载请求"); return YES; } @end