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 to FALSE.

  • websiteDataStore: 用于存放网站的本地存储内容的对象.

  • allowsInlineMediaPlayback: 是否使用本地 VC 或网页播放视频, iphone 默认是false.

  • mediaTypesRequiringUserActionForPlayback: 决定哪些类型的媒体需要用户手势才能开始播放. 其中的媒体类型在 WKAudiovisualMediaTypes 中去找.

  • urlSchemeHandlersetURLSchemeHandler 就可以处理之前在 WebView 中拦截 Scheme 来处理的内容. 不过需要 11.0 以上版本.

下面就是三个主要的类:

  1. 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.

  2. WKUserContentController 类:

    A WKUserContentController object provides a way for JavaScript to post messages and inject user scripts to a web view.

    它主要用于提供向 JS 注入消息, 和从 JS 接收消息的途径.

    它有三类功能:

    • 添加消息处理句柄: 即指定消息名称和对应的 handler.
    • 添加或删除用户 script
    • 添加或删除内容规则
  3. WKWebsiteDataStore 类:

    提供针对这个 webview 相关的网站内容存储. iOS 9+.

    其中的 Cookie 存储功能类 WKHTTPCookieStore 是在 iOS 11 以上提供的, 故还需要分版本处理.

用 builder 封装 WKWebView 的创建过程

已经将库传到了这里.


WKWebView 的 API 汇总
https://blog.rayy.top/2019/01/06/2019-27-wkwebview/
作者
貘鸣
发布于
2019年1月6日
许可协议