WKWebView浅析
原文链接:supermokey
WKWebView
一个WKWebView对象展示交互的web内容,例如应用于app内的浏览器。你可以在你的App中使用WKWebView。
综述
Important:
在iOS8.0和OS X 10.10以及以后,在App中开始使用WKWebView来加载web内容,不要(Do not use)使用UIWebView或者WebView。
当你使用 initWithFrame:configuration: 创建一个WKWebView对象之后,你就可以去加载web content了。使用 loadHTMLString:baseURL: 方法开始加载本地的HTML文件或者使用 loadRequest: 方法开始加载web内容。使用 :stopLoading 方法来结束加载,属性 loading 可以来检测当前web 视图是否正在加载。对一个对象设置遵循WKUIDelegate协议来追踪web内容的加载。
为了允许用户能够返回和前进来浏览网页的历史,使用 goBack 和 goForward 方法来进行操作(可以写一个button,来后让button调用goBack 和 goFroward)。使用 canGoBack 和 canGoForward 属性来判断网页是否可以返回或者前进,从而来设置button能否点击。
默认的,一个网页时默认将数字转换成手机号码的。当点击的时候,会拨打该号码,要想关闭这个默认的行为,可以设置dataDetectorTypes属性的WKDtaDetectorTypes字段不包含WKDataDetectorTypePhoneNumber标识。
你也可以使用 setMagnification: centeredAtPoint: 来设置网页第一次展示的比例。以后,用户可以使用手势来改变这个展示比例。
符号
初始化一个网页视图
- configuration
拷贝一个configuration来初始化一个网页使用。它是一个属性的集合,这个集合用来初始化网页。 - initWithFrame:configuration:
初始化一个网页视图,设置其大小和配置 - initWithCoder:
从解档数据获取一个初始化的对象。
检查视图信息
- scrollview
和网页关联的滚动视图。 - title
当前页的title。 - URL
当前请求网页的URL(NSURL类型) - customUserAgent
用户自定义代理字符串。如果没有用户自定义的代理字符串,它会被设置为nil。只在iOS9之后可用。 - serverTrust
当前委托对象的SecTrustRef对象。
设置代理
- navigationDelegate
网页视图导航代理 - UIDelegate
网页视图用户界面代理
装载内容(Loading content)
- estimatedProgress
当前navigation加载的进度,区间是0.0-1.0,加载进度包括主要的文档和一些其他的子资源文件,当资源加载完成之后,会一直保持在1.0,直到有新的navigation开始,它才会被重置为0.0。WKWebView类的这个属性符合KVO监听。 - hasOnlySecureContent
要加载的网页的所有资源是否都是通过安全编码链接加载的。YES表示是,NO表示不是。也是用KVO监听实现的。 - loadHTMLString:baseURL:
设置网页的内容和基URL。返回一个新的导航。 - loading
判断当前网页是否在加载,getter的时候使用isLoading。 - reload
从新加载页面内容。返回一个新的WKNavigation。 - reloadFromOrigin
重新加载页面,如果可能,使用缓存验证条件语句执行端到端的重新验证。 - stopLoading
停止加载当前页面所有的资源。 - loadData:MIMEType:characterEncodingName:baseURL:
设置网页内容和基URL,iOS9之后可用。 - loadFileURL:allowingReadAccessToURL:
导航到文件系统上请求URL。如果readAccessURL引用单个文件,则只有该文件可能由WKWebView加载;如果readAccessURL引用一个目录,那么该目录的文件可能由WKWebView加载。
缩放内容(Scaling conetent)
- allowMagnification
一个bool值,用来标示webView是否支持放大手势更改视图的比例,默认值为NO。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着) - magnification
当前放大的比例,默认是1.0。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着) - setMagnification:centeredAtPoint:
按照指定的因子来缩放网页内容并居中结果到指定的点。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着)
导航
- allowsBackForwardNavigationGestures
指示水平滑动手势是否将触发向前列表导航。YES表示是,默认为NO。设置为YES后,你就会发现,点击链接到的某个页面之后右划即可返回到上一个页面,左划即可返回到链接的页面,而且效果和push差不多。 - backForwardList
网页视图的后向列表。WKBackForwardList对象维护用于返回并转发到最近的页面的被访问页面的列表。WKBackForwardList对象仅维护列表数据,它不执行实际的页面加载(换句话说,它不会产生任何客户端请求)。 如果您需要执行页面加载,请参阅WKWebView中的loadRequest:方法以了解如何执行此操作。具体可参见WKBackForwardList类。 - canGoBack
判断网页是否能够返回,一个布尔值,表示在前向列表中是否有可以导航到的后面项目。 - canGoForward
一个布尔值,表示在可以导航到的前向列表中是否有前向项目。 - allowsLinkPreview
是否支持预览。 在iOS中,此属性适用于支持3D Touch的设备。 iOS中的默认值为NO。
如果将此属性的值设置为YES,iOS用户可以按链接以预览链接目标和检测到的数据,例如地址和电话号码。这样的预览对于用户来说是已知的。如果用户在链接预览上更深入地按下,则预览导航(或在用户术语中弹出)到目的地。由于pop导航将用户从您的应用程序切换到Safari,因此它选择启用iOS应用程序。
如果你想在iOS中支持链接预览,但也想让用户在你的应用程序中,你可以从使用WKWebView类切换到SFSafariViewController类。如果你将网络视图用作应用内浏览器,则进行此更改是最佳做法。 Safari视图控制器类自动支持链接预览。
在macOS中,此属性在具有Force Touch触控板的设备上可用。 macOS中的默认值为YES。
将此属性设置为其默认值YES时,macOS用户可以强制单击链接以显示显示链接目标的预览窗口。如果用户点击预览,目标将在Safari中打开。
在这两个平台上,当此属性设置为YES时,所有类型的检测到的数据都会响应按下。也就是说,在iOS 9和OS X v10.11中,你不能指定在WKWebView类中检测到哪些类型的数据。 - goBack
导航到后退列表的后一项。 - goForward
导航到前进列表的中的前进项目。 - goToBackForwarListItem:
导航到来自前向列表的项目,并将其设置为当前项目。 - loadRequest:
导航到将要请求的URL。
执行javaScript
- evaluateJavaScript:completionHandler:
评估javaScript字符串。该方法将脚本评估的结果(或错误)发送到完成处理程序。 完成处理程序总是在主线程上(Main thread)运行。
实例化方法
- goBack:
- goForward:
- reload:
- reloadFromOrigin:
- stopLoading:
上面几个方法都是WKIBActions分类的方法。具体可以参见官方API,和上面的说的方法类似
三个协议
- WKNavigationDelegate: 提供了追踪主窗口网页加载过程和判断主窗口和子窗口是否进行页面加载新页面的相关方法。
- WKScriptMessageHandler: 提供从网页中收消息的回调方法。
- WKUIDelegate: 提供用原生控件显示网页的方法回调。
总结
以后在开发的过程中,我们应该使用WKWebView,尽量不要去使用UIWebView,在我看来,WKWebView至少解决了两大难题:
- 加载进度
- 内存泄露
- 支持手动设置alert展示
对它的理解也仅仅是皮毛,在以后的开发过程中进一步了解学习吧。
参考
WKWebView浅析的更多相关文章
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- netty5 HTTP协议栈浅析与实践
一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...
- iOS网络3—UIWebView与WKWebView使用详解
一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...
随机推荐
- ABP源码分析十五:ABP中的实用扩展方法
类名 扩展的类型 方法名 参数 作用 XmlNodeExtensions XmlNode GetAttributeValueOrNull attributeName Gets an attribu ...
- 如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
一夜之间,微信小程序刷爆了行业网站和朋友圈,小程序真的能如张小龙所说让用户"即用即走"吗? 其功能能和动辄几十兆安装文件的APP相比吗? 开发小程序,是不是意味着移动应用开发的一次 ...
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- 【Win 10应用开发】使用RichEditBox控件应注意的问题
RichEditBox控件支持对多格式文本进行编辑,一般的文本输入控件可以使用TextBox,不过,如果希望编辑格式较为复杂的文本,就可以考虚使用RichEditBox控件. RichEditBox控 ...
- MongoDB安装与故障
下载完毕后 bin为官方代码 data为自行创建的文件夹 db存在数据 log存在日志 启动MongoDB 通过cmd到db的文件目录 通过mongod.exe代码执行data下的log文 ...
- geotrellis使用(二十七)栅格数据色彩渲染
目录 前言 复杂原因及思路分析 实现过程 总结 一.前言 今天我们来研究一下这个看似简单的问题,在地理信息系统中颜色渲染应当是最基本的操作和功能,比如我们将一幅Landsat数据拖拽到A ...
- AFNetworking 3.0 源码解读(二)之 AFSecurityPolicy
在我们平时的开发中,对网络连接安全方面所做的努力,应该占据很重要的位置. 在解释AFSecurityPolicy之前,我们先把基础的http/https 知识简单的普及一下.获取这方面的信息可通过这本 ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- go-hbase的Scan模型源码分析
git地址在这里: https://github.com/Lazyshot/go-hbase 这是一个使用go操作hbase的行为. 分析scan行为 如何使用scan看下面这个例子,伪代码如下: f ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...