WKWebView 的 API 汇总
本文最后更新于 2021年4月4日 晚上
看了一遍文档, 将 WKWebView 的 API 梳理了一下, 然后用一个 builder 封装了 WKWebView 的创建过程.
关于 WKWebView 的 API
需求
仅支持作为导航栈上控制器使用.
可以加载指定页面: URL 或 HTML 字符串.
可以选择显示或隐藏导航栏.
导航栏上按钮有关闭和返回, 返回的功能是直到没有上级界面才.
外界可以传入所需的 Cookie.
外界可以提供
ICommand接口对象和一个字符串对应的方法名称, 从而实现网页 JS 调用时候的处理.提供一个途径来调用 JS, 暂时没有想到用什么样的方式更好? 或者仅仅提供一个字典, 用于存放所需的 JS 字符串和处理闭包, 使用
evaluateJavaScript.
API 解析
入口是在WKWebView.
注意 configuration 属性是 configuration 的副本, 在启动后, configuration 就无法改变了, 除非是重新建一个 WebView.
默认情况下, 右滑手势是关闭的, 要打开需要设置 allowsBackForwardNavigationGestures.
主要要看这个配置类: WKWebViewConfiguration.
UserAgent 赋值:
applicationNameForUserAgentpreferences: 包括许多配置内容: 需要进去看ignoresViewportScaleLimits: 是否忽略用户缩放手势.The ignoresViewportScaleLimits property overrides the
user-scalableHTML property in a webpage. Defaults toFALSE.websiteDataStore: 用于存放网站的本地存储内容的对象.allowsInlineMediaPlayback: 是否使用本地 VC 或网页播放视频, iphone 默认是false.mediaTypesRequiringUserActionForPlayback: 决定哪些类型的媒体需要用户手势才能开始播放. 其中的媒体类型在WKAudiovisualMediaTypes中去找.urlSchemeHandler和setURLSchemeHandler就可以处理之前在 WebView 中拦截 Scheme 来处理的内容. 不过需要 11.0 以上版本.
下面就是三个主要的类:
WKPreferences:A
WKPreferencesobject encapsulates the preference settings for a web view.它设置一些具体的属性:
minimumFontSize: 最小的字体大小(单位是点), 默认值是 0, 表示不进行控制.javaScriptCanOpenWindowsAutomatically: 默认是 false. 表示需要用户交互才能打开 window.javaScriptEnabled: 决定是否允许网页中的 JS 执行, userScript 不受它的影响.This setting does not affect user scripts.
WKUserContentController类:A
WKUserContentControllerobject provides a way for JavaScript to post messages and inject user scripts to a web view.它主要用于提供向 JS 注入消息, 和从 JS 接收消息的途径.
它有三类功能:
- 添加消息处理句柄: 即指定消息名称和对应的 handler.
- 添加或删除用户 script
- 添加或删除内容规则
WKWebsiteDataStore类:提供针对这个 webview 相关的网站内容存储. iOS 9+.
其中的 Cookie 存储功能类
WKHTTPCookieStore是在 iOS 11 以上提供的, 故还需要分版本处理.
用 builder 封装 WKWebView 的创建过程
已经将库传到了这里.