我如何从JS与Swift进行通信
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何从JS与Swift进行通信相关的知识,希望对你有一定的参考价值。
我正在创建一个混合应用程序,我正在试图弄清楚如何将一些数据从WKWebView传递到本机应用程序。
我一直试图弄清楚这几天,我似乎找不到任何东西!关于这一点似乎在网上的信息很少,我找到的所有内容都是相反的(Swift到JS,而不是JS到Swift)。
我尝试过使用URL变量,但是Webview必须重新加载以便Swift识别它已经改变了。我尝试使用WKScriptMessageHandler,但我找不到任何关于它的好文档,而且看起来很复杂。
必须有一些简单的方法来实现这一目标。有任何想法吗?
我真的很感激能帮助我的人。
答案
实际上并不复杂。
首先,您必须将脚本消息处理程序添加到内容控制器中。
let contentController = WKUserContentController()
contentController.add(self, name: "derp") //name is the key you want the app to listen to.
接下来,您必须将内容控制器分配到配置中。
let config = WKWebViewConfiguration()
config.userContentController = contentController
然后,您需要将配置分配给Web视图。
let webView = WKWebView(frame: CGRect.zero, configuration: config) //set your own frame
而对于JS方面。
var message = {'fruit':'apple'};
window.webkit.messageHandlers.derp.postMessage(message);
最后,你必须让你的视图控制器(我假设webView在视图控制器中)符合WKScriptMessageHandler协议。我已按要求将其余代码添加到示例视图控制器中。
class MyViewController: UIViewController, WKScriptMessageHandler {
override func viewDidLoad() {
super.viewDidLoad()
let contentController = WKUserContentController()
contentController.add(self, name: "derp")
let config = WKWebViewConfiguration()
config.userContentController = contentController
let webView = WKWebView(frame: self.view.frame, configuration: config) //you can consider using auto layout though
self.view.addSubview(webView)
//load your url here
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
//handle script messages here
//message.name is "derp"
//message.body is ["fruit":"apple"]
}
}
以上是关于我如何从JS与Swift进行通信的主要内容,如果未能解决你的问题,请参考以下文章