WKWebView强大的新特性
iOS11对WKWebView的功能进一步完善,新增如下功能:
- Manager Cookies
- Fileter unwanted content
- Provide custom resources
下面是对各个特性的简单介绍,详细可参见源码。
1.Manager Cookies
iOS11新增了一个类来专门管理Cookies:WKHTTPCookieStore。它主要包含了了对Cookie的操作:删除、添加、获取等。
比如这种场景:
一个页面默认登录,当我没有登录的时候会弹出输入框,输入账号。输入完成之后,会提示已登录。再次打开该页面时,页面会先判断有没有cookie,有cookie直接提示已登录,没有cookie则再次弹框让用户登录。
但是现在有个新需求:第一次安装APP,启动的时候就有个默认的账户登录,而不需要弹框输入。这就用到了cookie的添加。在APP将要加载webView之前,通过HTTPCookie来初始化一个实例,将其塞到webView的configuration的数据存储中。这样加载WebView时就已经有cookie存在了。这样就打熬了首次默认登录的效果。关键代码如下:
let cookie = HTTPCookie.init(properties: [
.domain:"172.16.10.26",
.path:"/src/p/index/index.html",
.version:0,
.expires:Date.init(timeIntervalSinceNow: 30*60*60),
.name:"username",
.value:"zhanggui33"
])
let cookieStore = myWKWebView.configuration.websiteDataStore.httpCookieStore
cookieStore.setCookie(cookie!) {
self.myWKWebView.load(URLRequest.init(url: URL.init(string: "http://172.16.10.26:3333/src/p/index/index.html")!))
}
也就是在加载网页前,将cookie注入。更多可参见这里源代码。
2.Fileter unwanted content
另外一个新特性就是过滤你不想要的内容。比如说你在app中加载的网页中包含http请求,你可以根据以下规则将http资源加载之前转换成https加载。这个是苹果官方演示的一个规则:
let jsonString = """
[{
"trigger":{
"url-filter": ".*"
},
"action":{
"type": "make-https"
}
}]
"""
这里主要用到了WKContentRuleListStore。下面就来详细对其进行介绍。
创建一个Trigger字典
一个trigger的字典必须要包含url-filter这个key,它指定了匹配url的模式。其他的就是可选的了,例如你可以限制指定的域名,让该域名的内容不加载。例如下面的这个trigger规则,制定了用于图片和样式资源的规则trigger,不包含某写域名上的:
"trigger": {
"url-filter": ".*",
"resource-type": ["image", "style-sheet"],
"unless-domain": ["your-content-server.com", "trusted-content-server.com"]
}
除了上面提到的trigger key,还有url-filter-is-case-sensitive、is-domain、unless-domain、resource-type等。具体的详细介绍可以参见官方解释。
创建一个Action字典
当trigger匹配到了符合条件的资源,浏览器便会执行与trigger相关联的操作。当所有的trigger都被评估后,action便会按照顺序执行。
Action只有两个key:type和selector。type是必须要有的,selector可选,如果type是css-display-none,那么selector也是必须要有的。其他的type中selector是可选的。
type的类型有:block、block-cookies、css-display-none、ignore-previous-rules、make-https。更多可以参见官方解释。
例如我想屏蔽页面中所有图片的加载:
//把所有的图片阻塞加载
let jsonString = """
[{
"trigger":{
"url-filter": ".*",
"resource-type":["image"]
},
"action":{
"type":"block"
}
}]
"""
WKContentRuleListStore.default().compileContentRuleList(forIdentifier: "demoRuleList", encodedContentRuleList: jsonString) { (list, error) in
guard let contentRuleList = list else { return }
let configuration = self.filterWebView.configuration
configuration.userContentController.add(contentRuleList)
self.filterWebView.load(URLRequest.init(url: URL.init(string: "http://m.baidu.com")!))
}
更多词义的解释还是看官方文档,里面介绍的很详细。
3.Provide custom resources
这个特性允许你提供自定义的资源,这也可以实现离线缓存。例如你把所有的图片都放到app里面,然后网页加载图片时按照特定的scheme(比如:wk-feature://cat)来加载,然后在客户端代码中使用特定的SchemeHandler来解析即可。这里主要用到了WKURLSchemeHandler和WKURLSchemeTask。
关键代码如下:
let configuration = WKWebViewConfiguration()
let schemeHandler = MyCustomSchemeHandler.init(viewController: self)
configuration.setURLSchemeHandler(schemeHandler, forURLScheme: "wk-feature")
实现了自己的SchemeHandler,然后对特定的Scheme进行处理。
总结
如果你还在使用UIWebView,那么赶快更换为WKWebView吧。毕竟苹果更倾向于WKWebView。不断地将其功能丰富。而且经过了几个版本迭代,使用WKWebView的坑也都逐渐填平。
附源码
参考
转载请注明来源:http://www.cnblogs.com/zhanggui/p/8260136.html
WKWebView强大的新特性的更多相关文章
- 分享ES6中比较常用又强大的新特性
前言 es6有很多新东西,但是感觉常用的并不是很多,这里学习记录了一些我自己认为非常常用又强大的新特性. scoping 实用的块级作用域,let x = xxx 可以声明一个块级作用域的局部变量,简 ...
- 5个难以置信的VS 2015预览版新特性
Visual Studio 2015 Preview包含了很多强大的新特性,无论你是从事WEB应用程序开发,还是桌面应用程序开发,甚至是移动应用开发,VS 2015都将大大提高你的开发效率.有几个特性 ...
- 必须掌握的ES6新特性
ES6(ECMAScript2015)的出现,让前端开发者收到一份惊喜,它简洁的新语法.强大的新特性,带给我们更便捷和顺畅的编码体验,赞! 以下是ES6排名前十的最佳特性列表(排名不分先后): 1.D ...
- 最全的 Swift 4 新特性解析
转自: http://www.jianshu.com/p/f35514ae9c1a WWDC 2017 带来了很多惊喜.Swift 4 也伴随着 Xcode 9 测试版来到了我们的面前,很多强大的新特 ...
- Spring Boot 2.0正式发布,新特性解读
作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...
- WKWebView新特性及JS交互
引言 一直听说WKWebView比UIWebView强大许多,可是一直没有使用到,今天花了点时间看写了个例子,对其API的使用有所了解,为了日后能少走弯路,也为了让大家更容易学习上手,这里写下这篇文章 ...
- 趋势:Chrome为打包应用提供强大新特性
Chrome 7月9日刚为Chrome打包的应用提供了强大的访问Google服务例如Google统计.GoogleAPI和Google 钱包的能力,除此之外,还能够使用系统层面的服务包括蓝牙和原生应用 ...
- WKWebView的新特性与使用
在WWDC2014中,苹果推出了最新的iOS8系统,其中也伴随着很多控件的更新与升级.其中全新的WebKit库让人很是兴奋.本文也将讲解到WebKit中更新的WKWebView控件的新特性与使用方法, ...
- 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读
阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...
随机推荐
- java线程池的创建使用
利用java的多线程编程可以大大的提高系统的并发运行效率,线程越多并发执行的任务就越多,但是并不意味着效率会一直提高,相反会得到适得其反的效果. java中的多线程编程一共有三种方法: 继承Threa ...
- Java---String总结
JAVA中的String类,不管是日常开发,或者是面试,都是常用的类之一,所以写在这里也为为了总结,方便以后的查阅与复习. 特点: 1.Java中所有的类中,String是使用最多的一个类 2.是 ...
- C语言中的typedef
说明: ******使用typedefkeyword定义新的数据类型. ***如:typedef unsigned short U16.在定义变量时.unsigned short a和U16 a ...
- HDU 4162 Shape Number(字符串,最小表示法)
HDU 4162 题意: 给一个数字串(length <= 300,000),数字由0~7构成,求出一阶差分码,然后输出与该差分码循环同构的最小字典序差分码. 思路: 第一步是将差分码求出:s[ ...
- POJ 3616 Milking Time DP题解
典型的给出区间任务和效益值,然后求最大效益值的任务取法. 属于一维DP了. 一维table记录的数据含义:到当前任务的截止时间前的最大效益值是多少. 注意. 这表示当前任务一定要选择,可是终于结果是不 ...
- 树莓派学习笔记——USB wifi配置指南
0 前言 树莓派既能够使用有线网络又能够无线网络,假设使用有线网络不方便的话能够借助USB wifi无线网卡让树莓派也插上无线"翅膀". 可是和使用有线网络即插即用的方式不 ...
- pthread线程属性介绍
线程属性 创建线程函数 int pthread_create (pthread_t* restrictthread, const pthread_attr_t* restrictattr,void* ...
- Automatic Preferred Max Layout Width is not available on iOS versions prior to
警告:Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0 如: 找到: : 改动为:
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——NAND 8位硬件ECC
这节我们实现nand的ecc,保存环境变量到nand flash 中.然后把我们之前的led灯烧写到nand flash 中.开机启动.在 tiny210.h 中定义宏 CONFIG_S5PV210_ ...
- 页面的新开页,window.open的hacker
一.window.open如何进行hack 网上看的办法很多,归根接地还是不能解决掉,只有通过a标签的target属性 $obj.click(function(){ var newTab=windo ...