WKWebView庞大的新特色

1.Manager Cookies

iOS11增加产量了二个类来特意管理库克ies: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注入。更加多可参见这里源代码。

附源码

1.WKWebViewNewFeature

3.Provide custom resources

本条性格允许你提供自定义的财富,这也能够完成离线缓存。比如你把具有的图样都停放app里面,然后网页加载图片时根据一定的scheme(举例:wk-feature://cat)来加载,然后在客户端代码中运用一定的SchemeHandler来分析就能够。这里根本选拔了WKU奥迪Q5LSchemeHandler和WKULacrosseLSchemeTask。
主要代码如下:

        let configuration = WKWebViewConfiguration()
        let schemeHandler = MyCustomSchemeHandler.init(viewController: self)

        configuration.setURLSchemeHandler(schemeHandler, forURLScheme: "wk-feature")

贯彻了友好的SchemeHandler,然后对一定的Scheme进行管理。

iOS11对WKWebView的成效越来越周详,新增添如下效果:

参考

  1. 365足球网站,Customized Loading in
    WKWebView
  2. Introduction to Safari Content-Blocking
    Rules

转发请评释来源:

创制一个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等。具体的事无巨细介绍能够参见法定表达。

2.Fileter unwanted content

除此以外叁个新特点就是过滤你不想要的内容。比如说你在app中加载的网页中蕴藏http诉求,你能够依赖以下法规将http能源加载在此之前调换来https加载。那一个是苹果官方演示的一个准则:

let jsonString = """
            [{
                "trigger":{
                    "url-filter": ".*"
                },
                "action":{
                    "type": "make-https"
                }

            }]
            """

这里根本金和利息用了WKContentRuleListStore。上边就来详细对其开始展览介绍。

总结

举个例子你还在动用UIWebView,那么尽快改造为WKWebView吧。终归苹果更偏侧于WKWebView。不断地将其功效足够。并且通过了多少个本子迭代,使用WKWebView的坑也都稳步填平。

上面是对一一本性的简易介绍,详细可参见源码。

  1. Manager Cookies
  2. Fileter unwanted content
  3. Provide custom resources
始建一个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")!))
        }

越多词义的表明恐怕看法定文书档案,里面介绍的很详细。

相关文章