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占用过多内存,且 ...
随机推荐
- VS2012+EF6+Mysql配置心路历程
为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的 ...
- C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?
概述 上一篇 C#移动跨平台开发(1)环境准备发布之后不久,无独有偶,微软宣布了开放.NET框架源代码并且会为Windows.Mac和Linux开发一个核心运行时(Core CLR),这也是开源的!I ...
- MVC5在Mono上的各种坑
买了Macbook后,各种事情的纠缠,都没好好地用过OSX系统. 果断的装上了xcode和mono,还有monodevelop. 然后把项目移植到mono上运行,各种问题. 然后第一个问题来了 权限不 ...
- .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono
.NET Core 超强性能测试组件BenchmarkDotNet 支持Full .NET Framework, .NET Core (RTM), Mono. BenchmarkDotNet支持 C# ...
- subline text3 使用总结
安装:http://www.sublimetext.com/3 插件扩展: 安装package control组件 按Ctrl+`调出console(注:安装有QQ输入法的这个快捷键会有冲突的,输入 ...
- ABP源码分析十七:DTO 自动校验的实现
对传给Application service对象中的方法的DTO参数,ABP都会在方法真正执行前自动完成validation(根据标注到DTO对象中的validate规则). ABP是如何做到的? 思 ...
- ELK 安装笔记
logstash -noverify -javaagent:E:\svn\other\nn\jrebel6.0.0+crack\jrebel6.0.0-crack\jrebel.jar -Drebel ...
- 用php生成一个excel文件(原理)
1.我们用php来生成一个excel文档来讲述其原理: excel2007里面的文档目录组成部分为: 2.我们使用ZipArchive()方法来生成一个简易的excel文件. 使用方法: 3.代码如下 ...
- 前端学PHP之PHP操作memcache
× 目录 [1]安装 [2]连接 [3]增删改查[4]分布式[5]状态[6]安全[7]应用 前面的话 和访问mysql服务器类似,PHP也是作为客户端API访问memcached服务器的,所以同样需要 ...
- 计算机程序的思维逻辑 (53) - 剖析Collections - 算法
之前几节介绍了各种具体容器类和抽象容器类,上节我们提到,Java中有一个类Collections,提供了很多针对容器接口的通用功能,这些功能都是以静态方法的方式提供的. 都有哪些功能呢?大概可以分为两 ...