iOS 向 WKWebView 公开自定义 API

iOS Expose Custom API to WKWebView

在 Android,我正在使用 addJavascriptInterface method to expose a custom API to webpages I load in a WebView

iOS WKWebView 是否有类似的替代方案?

我遇到了 evaluateJavaScript,它允许我 运行 JavaScript 将我的 API 添加到全局范围,但我想不出一个方法添加与我的应用程序通信的代码。

可以从 WKWebview 到代码进行通信,但只能使用一个函数,这很难做到,但如果你管理好一切,你可以得到好的结果。我会让这篇文章来解释它,因为这是一个相当复杂的过程,他们会比我做得更好。

Creating links between WKWebView and native code

这是可能的。您可能正在寻找 WKScriptMessageHandler。为 Web 视图创建自定义配置。例如在你的视图控制器的 viewDidLoad.

let configuration = WKWebViewConfiguration()

使用配置注册脚本消息处理程序。例如一个视图控制器,它在 viewDidLoad 上创建 WKWebView。然后视图控制器需要符合 WKScriptMessageHandler.

configuration.userContentController.add(self, name: "helloworld")

使用自定义配置以编程方式创建 Web 视图。

webView = WKWebView(frame: view.frame, configuration: configuration)

从 JavaScript 调用 WebKit 消息处理程序。消息处理程序可作为全局 window.webkit.messageHandlers 对象中的属性使用。属性使用上面调用 WKUserContentController.add(_:name:) 时使用的名称。

window.webkit.messageHandlers.helloworld.postMessage("Hi!");

处理来自 JavaScript 上下文的调用。

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print(message.body as! String)
}

免责声明:我将此代码片段从 my own answer 复制并缩减为更高级别的问题,解决方案包括这些步骤。