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 到代码进行通信,但只能使用一个函数,这很难做到,但如果你管理好一切,你可以得到好的结果。我会让这篇文章来解释它,因为这是一个相当复杂的过程,他们会比我做得更好。
这是可能的。您可能正在寻找 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 复制并缩减为更高级别的问题,解决方案包括这些步骤。
在 Android,我正在使用 addJavascriptInterface
method to expose a custom API to webpages I load in a WebView
。
iOS WKWebView
是否有类似的替代方案?
我遇到了 evaluateJavaScript
,它允许我 运行 JavaScript 将我的 API 添加到全局范围,但我想不出一个方法添加与我的应用程序通信的代码。
可以从 WKWebview 到代码进行通信,但只能使用一个函数,这很难做到,但如果你管理好一切,你可以得到好的结果。我会让这篇文章来解释它,因为这是一个相当复杂的过程,他们会比我做得更好。
这是可能的。您可能正在寻找 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 复制并缩减为更高级别的问题,解决方案包括这些步骤。