应用程序之UIWebView的使用
- UIWebView简介
- 知识点总结
- 代码实现
一、UIWebView简介
2.能够加载html/htm、pdf、docx、txt等格式的文件
3.系统自带的Safari浏览器就是通过UIWebView实现的
2⃣️常用加载方法:
loadRequest:
loadHTMLString:baseURL:
loadData:MIMEType:textEncodingName:baseURL:
3⃣️常用导航方法:
goBack – 回退
goForward – 前进
reload - 重载
stopLoading - 取消载入内容
4⃣️常用属性:
scalespageToFit – 自动对页面进行缩放以适应屏幕
dataDetectorTypes - 设定电话号码、网址、电子邮件和日期等文字变为链接文字
浏览器通过MIME标志符可以知道使用哪种插件读取相关文件
5⃣️iOS可以直接调用js代码与页面通讯


- #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 > ) {
- [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
应用程序之UIWebView的使用的更多相关文章
- ios学习之UIWebView网页视图
转载于爱德凡的百度空间,地址:http://hi.baidu.com/aidfan/item/34a720866b33cbcdef083d37 UIWebView 使用详解 一.UIWebView加载 ...
- iOS应用程序内打开指定qq聊天、给某人打电话
-(void)btn2Clik { UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSURL *url = [N ...
- ios开发入门- WebView使用
转自:http://mahaile.blog.51cto.com/2891586/1021515/ 目标 : webview使用 在一些移动app中,有时程序会载入 外表的html 界面, andro ...
- UI控件(UIWebView)
本文主要记录UIWebView三方面内容: 1.基本的加载网页链接或文件: 2.网页js调用原生,也就是Cordova混合架构的原理: 3.原生调用js程序: 原生部分主要代码: @implement ...
- iOS程序破解——获取.ipa程序包
原文在此 首先肯定不是获取自己的ipa包. 为什么要获取ipa包呢?比如,在仿写一些程序时,避免不了获取它的图片素材等等,那么最快也是最有效的方式就是获取原程序的ipa包.更或者,你想要逆向分析某一款 ...
- WKWebView与JS交互,UIWebView+JavascriptCore和JS交互
最近一直在做有关Swift和JavaScript交互的程序,所以有关UIWebView和WKWebView在使用上的差别在此总结下: UIWebView: (1)创建 var webView: UIW ...
- 微信小程序实质是什么? Hybrid App
微信小程序是一种不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用.微信小程序实质是Hybrid技术的应用.Hybrid App(混合模式移动应用). 小程序能够更多的可以更多的调用手机本 ...
- UIWebView的应用和其中的JS与OC间传值
现在有很多的应用已经采用了WebView和html语言结合的开发模式.html5一直很火因为一份代码可以在多个平台上运用啊,效果各不相同都很美观,也越来越有一些公司直接招后台程序员和html5程序员, ...
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)
25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
随机推荐
- linux内核分析之缺页中断【转】
转自:http://blog.csdn.net/bullbat/article/details/7108402 linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配 ...
- bash shell 文本文件操作
一.打开文本文档,查看文本的内容,我们最直观的方式就是用编辑器,并且可以使用vi内部的查找命令查找[参见Vim文字编辑] vi test.txt#使用vi打开当前目录下的test.txt文本 二.总结 ...
- centos6源码编译安装lnmp环境
操作系统 版本 64位 CentOS-6.6 10.0.0.20 安装环境所需依赖包 yum -y install gcc automake autoconf libtool make gcc- ...
- Android 横向列表GridView 实现横向滚动
Android 横向列表实现,可左右滑动,如下图 1.主界面布局代码:activity_main.xml a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件b.G ...
- JavaScript 性能优化的小知识总结
前言 一直在学习 javascript,也有看过<犀利开发 Jquery 内核详解与实践>,对这本书的评价只有两个字犀利,可能是对 javascript 理解的还不够透彻异或是自己太笨,更 ...
- 小白书 黑白图像【DFS/Flood Fill】
http://blog.csdn.net/u010470972/article/details/33415617 Description 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计 ...
- C++米勒拉宾算法模板
//我也忘了从哪找来的板子,不过对于2^63级的数据请考虑使用java内置的米勒拉宾算法. 1 #include <iostream> #include <string> #i ...
- iOS9 Storyboard unwind segue反回传递事件时机详细步骤
当返回上一个界面且需要上一个界面做某事时,用unwind segue实现起来比delegate简单许多,甚至有时不适合用delegate来实现,那么我们就用unwind segue吧,而且像1-> ...
- 更改vsftpd默认的21端口
vsftpd默认的端口是21 我想更改为别的端口 那么首先编辑 vsftpd的配置文件 /etc/vsftpd/vsftpd.conf 添加监听端口 listen_port **** 然后修改ftp的 ...
- androd 获得wifi列表
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...