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 赋值:
applicationNameForUserAgent
preferences
: 包括许多配置内容: 需要进去看ignoresViewportScaleLimits
: 是否忽略用户缩放手势.The ignoresViewportScaleLimits property overrides the
user-scalable
HTML property in a webpage. Defaults toFALSE
.websiteDataStore
: 用于存放网站的本地存储内容的对象.allowsInlineMediaPlayback
: 是否使用本地 VC 或网页播放视频, iphone 默认是false.mediaTypesRequiringUserActionForPlayback
: 决定哪些类型的媒体需要用户手势才能开始播放. 其中的媒体类型在WKAudiovisualMediaTypes
中去找.urlSchemeHandler
和setURLSchemeHandler
就可以处理之前在 WebView 中拦截 Scheme 来处理的内容. 不过需要 11.0 以上版本.
下面就是三个主要的类:
WKPreferences
:A
WKPreferences
object 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
WKUserContentController
object 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 的创建过程
已经将库传到了这里.