应用程序之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个关于可以提升程序性能的提示和技巧,分 ...
随机推荐
- Scala学习随笔——深入类和对象
函数化对象(又称方程化对象)指的是所定义的类或对象不包含任何可以修改的状态. 本篇随笔就是着重记录函数化对象.定义了一个有理数类定义的几个不同版本,以介绍 Scala 类定义的几个特性:类参数和构造函 ...
- Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: /tmp/hsperfdata_hadoop/44512
早上登录hbase shell,出现异常: [hadoop@node002 ~]$ hbase shell Java HotSpot(TM) 64-Bit Server VM warning: Ins ...
- 使用VMware 管理服务器
使用VMware 管理服务器 实验室有一台浪潮服务器.师兄只留下了开机用户名和密码,和一个VMware vSphere Client的安装包,就把它托付给了我.就是这样一个方方正正的长方体,只提供了接 ...
- 这篇 感觉很实用--DJANGO ORM
Django之model F/Q以及多对多操作 http://www.cnblogs.com/ccorz/p/5882400.html model之F/Q操作 F操作,使用查询条件的值 打个比方吧,有 ...
- 想转行做web前端工程师,必学这6大技能
web前端工程师是近几年才发展出来的新兴职业,也是目前火爆且高薪的职业.大需求的市场环境下,出现了越来越多的人群转行做web前端工程师,如设计师.后台程序员.网虫.大学其他专业.策划.编辑等等. 要学 ...
- [scrapy] 爬了第一页就停止 filtered off site request to
我碰到这个问题的原因是 allowed_domains 写错了 至于还有没有别的原因就不知道了
- 设置iframe高度自适应屏幕高度
写在前面: 最近在搭建项目前台页面框子的时候,把iframe设置成了固定的高度,导致不同的电脑尺寸访问的时候,高度差异较大,故查了下,将iframe设置成自动适应屏幕高度的方式,这里记录下. 还是直接 ...
- 数值计算方法 | C语言实现几个数值计算方法(实验报告版)
目录 写在前面 实验一 牛顿插值方法的实现 实验二 龙贝格求积算法的实现 实验三 高斯列主元消去法的实现 实验四 最小二乘方法的实现 写在前面 使用教材:<数值计算方法>黄云清等编著 科学 ...
- 【NOIP模拟赛】【乱搞AC】【贪心】【模拟】匹配
匹配 (match.pas/match.c/match.cpp) [题目描述] 到了新的学期,Mcx痛苦的发现通用技术课居然是有实验课的,这样的话他就不得不放弃写作业的想法而去做一件类似于搭积木的事情 ...
- 访问控制技术- 标准IP访问列表
1.设置pc IP 网关 192.168.1.1 192.168.1.254 192.168.1.2 192.168.1.254 192.168.3.1 192.168.3.254 2.设置交换机借 ...