iOS - UIWebView
前言
NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding,
UIScrollViewDelegate>
@available(iOS 2.0, *) public class UIWebView : UIView, NSCoding, UIScrollViewDelegate
UIWebView 控件是做网络应用开发时使用的最多的一个控件,它实现了内置的浏览器(类似于 Safari),并且 UIWebView 继承自 UIView,可以将其像其它控件一样应用到需要的位置。
优点:简单,快速。
缺点:内存消耗大,对于手机端的硬件支持不够好,例如:定位,捏合(传统互联网只有点击动作)。
应用场景:
适合于内容版式变化比较大的应用。
网易新闻,各种图文混排,甚至嵌入视频。
菜谱,各种图片搭配,图文并茂。
运动类的应用:羽毛球,后场高远球,来一段视频,图解说明,分解动作...。有些公司,有网站,没有 iOS 应用,着急上架,可以先用 webView 快速包装一个。
百度的一系列应用,去年年初才慢慢的转成 iOS 应用。
iPhone 手机的浏览器 Safari 就是用 UIWebView 控件开发的。
微信内嵌的浏览器就是 UIWebView 控件
iOS 9+ 中若要加载 http: 网络,需要在 Info.plist 中添加 App Transport Security Settings -> key: Allow Arbitrary Loads,value: YES。
1、UIWebView 的创建
Objective-C
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)]; // 将 webView 添加到屏幕
[self.view addSubview:webView]; // 加载网络地址
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]]; // 适配屏幕
webView.scalesPageToFit = YES;
Swift
let webView:UIWebView = UIWebView(frame: CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)) // 将 webView 添加到屏幕
self.view.addSubview(webView) // 加载网络地址
webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!)) // 适配屏幕
webView.scalesPageToFit = true
2、UIWebView 的设置
Objective-C
// 加载指定 URL 所设定的内容
/*
异步加载,可以从服务器和本地读取
*/ // 加载网络数据
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]]; // 加载本地文件
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu"
ofType:@"pdf"]]]]; // 加载 HTML 字符串数据
/*
指定 baseURL 可加载图片
*/ // 加载网络 HTML 字符串数据
NSString *htmlString1 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://m.baidu.com/"]
encoding:NSUTF8StringEncoding
error:NULL];
[webView loadHTMLString:htmlString1 baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]]; // 加载本地 HTML 字符串数据
NSString *htmlString2 = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"]
encoding:NSUTF8StringEncoding
error:NULL];
[webView loadHTMLString:htmlString2 baseURL:nil]; // 加载 Data 数据
/*
比 loadHTMLString 更底层
*/
NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"]]];
[webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]]; // 适配屏幕
/*
YES 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小
*/
webView.scalesPageToFit = YES; // 设置自动分页模式
/*
UIWebPaginationModeUnpaginated, // 默认不分页
UIWebPaginationModeLeftToRight,
UIWebPaginationModeTopToBottom,
UIWebPaginationModeBottomToTop,
UIWebPaginationModeRightToLeft
*/
webView.paginationMode = UIWebPaginationModeLeftToRight; // 设置超链接类型
/*
UIDataDetectorTypePhoneNumber = 1 << 0, // Phone number detection
UIDataDetectorTypeLink = 1 << 1, // URL detection
UIDataDetectorTypeAddress = 1 << 2, // Street address detection
UIDataDetectorTypeCalendarEvent = 1 << 3, // Event detection UIDataDetectorTypeNone = 0, // No detection at all
UIDataDetectorTypeAll = NSUIntegerMax // All types
*/
webView.dataDetectorTypes = UIDataDetectorTypeAll; // 设置是否用内嵌 HTML5 播放视频
/*
内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性
YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES
*/
webView.allowsInlineMediaPlayback = NO; // 设置是否需要用户触发来启动媒体播放
/*
iPhone and iPad Safari both default to YES
*/
webView.mediaPlaybackRequiresUserAction = NO; // 设置本页面是否可以 AirPlay 播放
/*
iPhone and iPad Safari both default to YES
*/
webView.mediaPlaybackAllowsAirPlay = YES; // 设置是否把网页内容全部加载到内存中再去渲染
/*
iPhone and iPad Safari both default to NO
*/
webView.suppressesIncrementalRendering = NO; // 设置是否需要用户触发显示键盘
/*
default is YES
*/
webView.keyboardDisplayRequiresUserAction = NO; // 刷新
/*
重新加载页面
*/
[webView reload]; // 停止加载
/*
加载过程中,强行停止加载
*/
[webView stopLoading]; // 返回至上一个链接
/*
在产生多个链接浏览时,可以返回至浏览历史的上一个链接
*/
[webView goBack]; // 前进至下一个链接
/*
在产生多个链接浏览时,可以前进至浏览历史的下一个链接
*/
[webView goForward]; // 设置代理,需遵守协议 <UIWebViewDelegate>
webView.delegate = self;
Swift
// 加载指定 URL 所设定的内容
/*
异步加载,可以从服务器和本地读取
*/ // 加载网络数据
webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!)) // 加载本地文件
webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "pdf")!))) // 加载 HTML 字符串数据
/*
指定 URL 可加载图片
*/ // 加载网络 HTML 字符串数据
let htmlString1:String = try! String(contentsOfURL: NSURL(string: "https://m.baidu.com/")!, encoding: NSUTF8StringEncoding)
webView.loadHTMLString(htmlString1, baseURL: NSURL(string: "https://m.baidu.com/")!) // 加载本地 HTML 字符串数据
let htmlString2:String = try! String(contentsOfFile: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!,
encoding: NSUTF8StringEncoding)
webView.loadHTMLString(htmlString2, baseURL: nil) // 加载 Data 数据
/*
比 loadHTMLString 更底层
*/
let data = NSData(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!))
webView.loadData(data!, MIMEType: "text/html", textEncodingName: "utf-8", baseURL: NSURL(string: "https://m.baidu.com/")!) // 适配屏幕
/*
true 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小
*/
webView.scalesPageToFit = true // 设置自动分页模式
/*
case Unpaginated // 默认不分页
case LeftToRight
case TopToBottom
case BottomToTop
case RightToLeft
*/
webView.paginationMode = .Unpaginated // 设置超链接类型
/*
PhoneNumber // Phone number detection
Link // URL detection
Address // Street address detection
CalendarEvent // Event detection None // No detection at all
All // All types
*/
webView.dataDetectorTypes = .All // 设置是否用内嵌 HTML5 播放视频
/*
内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性
YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES
*/
webView.allowsInlineMediaPlayback = false // 设置是否需要用户触发来启动媒体播放
/*
iPhone and iPad Safari both default to YES
*/
webView.mediaPlaybackRequiresUserAction = false // 设置本页面是否可以 AirPlay 播放
/*
iPhone and iPad Safari both default to YES
*/
webView.mediaPlaybackAllowsAirPlay = true // 设置是否把网页内容全部加载到内存中再去渲染
/*
iPhone and iPad Safari both default to NO
*/
webView.suppressesIncrementalRendering = false // 设置是否需要用户触发显示键盘
/*
default is YES
*/
webView.keyboardDisplayRequiresUserAction = false // 刷新
/*
重新加载页面
*/
webView.reload() // 停止加载
/*
加载过程中,强行停止加载
*/
webView.stopLoading() // 返回至上一个链接
/*
在产生多个链接浏览时,可以返回至浏览历史的上一个链接
*/
webView.goBack() // 前进至下一个链接
/*
在产生多个链接浏览时,可以前进至浏览历史的下一个链接
*/
webView.goForward() // 设置代理,需遵守协议 UIWebViewDelegate
webView.delegate = self
3、UIWebView 的协议方法
需遵守协议 UIWebViewDelegate,并设置代理
Objective-C
// 将要开始加载网页
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return YES;
} // 开始加载网页
- (void)webViewDidStartLoad:(UIWebView *)webView { } // 加载网页完成
- (void)webViewDidFinishLoad:(UIWebView *)webView { } // 加载网页失败
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { }
Swift
// 将要开始加载网页
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { return true
} // 开始加载网页
func webViewDidStartLoad(webView: UIWebView) { } // 加载网页完成
func webViewDidFinishLoad(webView: UIWebView) { } // 加载网页失败
func webView(webView: UIWebView, didFailLoadWithError error: NSError?) { }
iOS - UIWebView的更多相关文章
- ios UIWebView截获html并修改便签内容(转载)
ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...
- IOS UIWebView截获html并修改便签内容,宽度自适应
需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服 ...
- ios UIWebView截获html并修改便签内容
需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端 ...
- iOS UIWebView 获取内容实际高度,关闭滚动效果
本文转载至 http://my.oschina.net/Khiyuan/blog/341535 iOS UIWebView 获取内容实际高度,关闭滚动效果 近期做东西,将 UIWebView 嵌套 ...
- iOS UIWebView获取403/404
问题描述 与WindowsPhone不同,iOS UIWebView并不认为403/404这种情况下页面访问是失败的,这也情有可原,但有时候,我们需要对WebView所遇到的403/404进行处理. ...
- iOS UIWebView与JavaScript的交互 相关资料
UIWebView自适应宽度 iOS UIWebView中javascript与Objective-C交互.获取摄像头 iOS中JavaScript和OC交互 iOS与js交互,获取webview完整 ...
- ios UIWebView自定义Alert风格的弹框
之前开发过一个App,因为公司之前写好了网页版的内容和安卓版本的App,我进去后老板要求我ios直接用网页的内容,而不需要自己再搭建框架.我一听,偷笑了,这不就是一个UIWebView吗?简单! 但是 ...
- iOS --- UIWebView的加载本地数据的三种方式
UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIM ...
- iOS UIWebView中javascript与Objective-C交互、获取摄像头
UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Ex ...
随机推荐
- Rsync原理介绍及配置应用
1.前言 基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍,比如远程数据镜像.备份.复制.同步,数据下载.上传.共享等等.对此,最简单.直接的做法是对数据进行完全复制.然而,数据在网络上来 ...
- northwind数据库介绍
① Categories: 种类表相应字段:CategoryID :类型ID:CategoryName:类型名;Description:类型说明;Picture:产品样本 ② CustomerCust ...
- MyEclipse+Android 安装配置
1.先安装M有Eclipse 就是不断点:下一步下一步最后finish 激活:http://blog.my-eclipse.cn/myeclipse-2014-crack.html (该网站上 ...
- ThreadLocal的使用及介绍
ThreadLocal总结 1.ThreadLocal使用场合主要解决多线程中数据数据因并发产生不一致问题.ThreadLocal为每个线程的中并发访问的数据提供一个副本,通过访问副本来运行业务,这样 ...
- Parencodings 分类: POJ 2015-06-28 22:00 7人阅读 评论(0) 收藏
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22757 Accepted: 13337 De ...
- PL/SQL注册码
code:j6stndb9tk72xfbhbqczcdqnjd8lyj466n number:882851 ps:xs374ca
- Eclipse 中outline的小图标的含义(zend也一样)
颜色:绿色:public黄色:protected蓝色:no modifier红色:private形状:实心:method空心:variable实心中间有字母C:classClass右侧有向右的箭头:运 ...
- hibernate的like用法(用占位符解决)
原本我的写法:Query repeatClientQuery=querysession.createQuery("from ClientInfo as a " +"whe ...
- Mysql--学习笔记(==》简单查询三)
-- 查看查询数据显示SELECT * FROM student; -- 显示一部分信息的查询SELECT sname 姓名,sscore 成绩,saddress 家庭住址 FROM student; ...
- Objective之ARC
http://blog.csdn.net/siemenliu/article/details/7891345