原文链接: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: 来设置网页第一次展示的比例。以后,用户可以使用手势来改变这个展示比例。

符号
初始化一个网页视图
  1. configuration

    拷贝一个configuration来初始化一个网页使用。它是一个属性的集合,这个集合用来初始化网页。
  2. initWithFrame:configuration:

    初始化一个网页视图,设置其大小和配置
  3. initWithCoder:

    从解档数据获取一个初始化的对象。
检查视图信息
  1. scrollview

    和网页关联的滚动视图。
  2. ​title

    当前页的title。
  3. ​URL

    当前请求网页的URL(NSURL类型)
  4. customUserAgent

    用户自定义代理字符串。如果没有用户自定义的代理字符串,它会被设置为nil。只在iOS9之后可用。
  5. serverTrust

    当前委托对象的SecTrustRef对象。
设置代理
  1. navigationDelegate

    网页视图导航代理
  2. UIDelegate

    网页视图用户界面代理
装载内容(Loading content)
  1. estimatedProgress

    当前navigation加载的进度,区间是0.0-1.0,加载进度包括主要的文档和一些其他的子资源文件,当资源加载完成之后,会一直保持在1.0,直到有新的navigation开始,它才会被重置为0.0。WKWebView类的这个属性符合KVO监听。
  2. hasOnlySecureContent

    要加载的网页的所有资源是否都是通过安全编码链接加载的。YES表示是,NO表示不是。也是用KVO监听实现的。
  3. loadHTMLString:baseURL:

    设置网页的内容和基URL。返回一个新的导航。
  4. loading

    判断当前网页是否在加载,getter的时候使用isLoading。
  5. reload

    从新加载页面内容。返回一个新的WKNavigation。
  6. reloadFromOrigin

    重新加载页面,如果可能,使用缓存验证条件语句执行端到端的重新验证。
  7. stopLoading

    停止加载当前页面所有的资源。
  8. loadData:MIMEType:characterEncodingName:baseURL:

    设置网页内容和基URL,iOS9之后可用。
  9. loadFileURL:allowingReadAccessToURL:

    导航到文件系统上请求URL。如果readAccessURL引用单个文件,则只有该文件可能由WKWebView加载;如果readAccessURL引用一个目录,那么该目录的文件可能由WKWebView加载。
缩放内容(Scaling conetent)
  1. allowMagnification

    一个bool值,用来标示webView是否支持放大手势更改视图的比例,默认值为NO。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着)
  2. magnification

    当前放大的比例,默认是1.0。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着)
  3. setMagnification:centeredAtPoint:

    按照指定的因子来缩放网页内容并居中结果到指定的点。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着)
导航
  1. allowsBackForwardNavigationGestures

    指示水平滑动手势是否将触发向前列表导航。YES表示是,默认为NO。设置为YES后,你就会发现,点击链接到的某个页面之后右划即可返回到上一个页面,左划即可返回到链接的页面,而且效果和push差不多。
  2. backForwardList

    网页视图的后向列表。WKBackForwardList对象维护用于返回并转发到最近的页面的被访问页面的列表。WKBackForwardList对象仅维护列表数据,它不执行实际的页面加载(换句话说,它不会产生任何客户端请求)。 如果您需要执行页面加载,请参阅WKWebView中的loadRequest:方法以了解如何执行此操作。具体可参见WKBackForwardList类。
  3. canGoBack

    判断网页是否能够返回,一个布尔值,表示在前向列表中是否有可以导航到的后面项目。
  4. canGoForward

    一个布尔值,表示在可以导航到的前向列表中是否有前向项目。
  5. 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类中检测到哪些类型的数据。
  6. goBack

    导航到后退列表的后一项。
  7. goForward

    导航到前进列表的中的前进项目。
  8. goToBackForwarListItem:

    导航到来自前向列表的项目,并将其设置为当前项目。
  9. loadRequest:

    导航到将要请求的URL。
执行javaScript
  1. evaluateJavaScript:completionHandler:

    评估javaScript字符串。该方法将脚本评估的结果(或错误)发送到完成处理程序。 完成处理程序总是在主线程上(Main thread)运行。
实例化方法
  1. goBack:
  2. goForward:
  3. reload:
  4. reloadFromOrigin:
  5. stopLoading:

    上面几个方法都是WKIBActions分类的方法。具体可以参见官方API,和上面的说的方法类似
三个协议
  1. WKNavigationDelegate: 提供了追踪主窗口网页加载过程和判断主窗口和子窗口是否进行页面加载新页面的相关方法。
  2. WKScriptMessageHandler: 提供从网页中收消息的回调方法。
  3. WKUIDelegate: 提供用原生控件显示网页的方法回调。
总结

以后在开发的过程中,我们应该使用WKWebView,尽量不要去使用UIWebView,在我看来,WKWebView至少解决了两大难题:

  1. 加载进度
  2. 内存泄露
  3. 支持手动设置alert展示

对它的理解也仅仅是皮毛,在以后的开发过程中进一步了解学习吧。

参考
  1. 苹果官方文档
  2. NSHipster

WKWebView浅析的更多相关文章

  1. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  2. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  3. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  4. netty5 HTTP协议栈浅析与实践

      一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...

  5. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  6. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

  7. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  8. 浅析匿名函数、lambda表达式、闭包(closure)区别与作用

    浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...

  9. iOS网络3—UIWebView与WKWebView使用详解

    一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...

随机推荐

  1. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  2. 再来说说 LaTeX

    在我的上一篇随笔中,我提到了 Markdown.LaTeX 和 MathJax.这几个东西对目前的网络技术文章的写作.展示都有深远的影响.在上一篇中,我还给出了一份 LaTeX 语法的学习资料.在这一 ...

  3. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  4. 详解this

    this 虐我千百遍,看完此文效立见!不得不说,这篇文章的总结很地道很全面,适合收藏之用. 原文:all this 习惯了高级语言的你或许觉得JavaScript中的this跟Java这些面向对象语言 ...

  5. 最全的Windows Azure学习教程汇总

    Windows Azure 是微软基于云计算的操作系统,能够为开发者提供一个平台,帮助开发可运行在云服务器.数据中心.Web 和 PC 上的应用程序. Azure 是一种灵活和支持互操作的平台,能够将 ...

  6. Java访问Hbase

    1.kerberos验证 a.下载对应版本JCE(Java Cryptography Extension),解压拷贝local_policy.jar/US_export_policy.jar到$JAV ...

  7. EMC与电容(二)-电容参数意义、各电容的特点及应用

    上次的问题,看到很多回答里都有关于X电容,Y电容,NPO之类,这些很奇怪的参数到底代表什么意义呢?以前很多次都在BOM表里看到这些参数,一直都无视过去,正好这次的EMC课程里也提到这方面的知识,正好跟 ...

  8. MySQL触发器-条件触发器语法

    文章为作者原创,未经许可,禁止转载.    -Sun Yat-sen University 冯兴伟 实验4 触发器 )实验目的 掌握数据库触发器的设计和使用方法 )实验内容和要求 定义BEFORE触发 ...

  9. ASP.NET AntiXSS的作用

    XSS跨站脚本攻击        是指用户输入HTML编码对网站进行跨站攻击.            通过使用FCKeditor.FreeTextBox.Rich TextBox.Cute Edito ...

  10. Python标准模块--os

    1.模块简介 os模块主要包含普遍的操作系统相关操作,如果开发者希望自己开发的Python应用能够与平台无关,尤其需要关注os这个模块. 2.模块使用 2.1 os模块 1. os.name,输出字符 ...