如何将数据从javascript发送到swift?

如何将数据从javascript发送到swift?,javascript,swift,Javascript,Swift,我正在使用swift和HTML/Javascript开发一个iOS混合应用程序。在Android中,我可以使用web view: WebSettings settings = web view.getSettings(); settings.setJavaScriptEnabled(true); webView.addJavascriptInterface(this,"Book"); webView.loadUrl("http://example.com/test.html"); 公众退

我正在使用swift和HTML/Javascript开发一个iOS混合应用程序。在Android中,我可以使用web view:

 WebSettings settings = web view.getSettings();
 settings.setJavaScriptEnabled(true);
 webView.addJavascriptInterface(this,"Book");
webView.loadUrl("http://example.com/test.html");
公众退票(){ .... }

在test.html中,当您单击一个按钮运行javascript代码时,会出现一个javascript:Book.back();因此,控件将从javascript转到android以运行函数back()。我怎样才能在swift中做类似的事情

import WebKit
....
        let url = Bundle.main.url(forResource: "test", withExtension: "html")!
        webView.loadFileURL(url, allowingReadAccessTo: url)
        let request = URLRequest(url: url)
        webView.load(request)

请使用下面的代码。下面的代码一直在寻找来自javascript的消息,特别是“paymentHandler”


您应该使用
WKScriptMessageHandler
将消息从Javascript传递给Swift,在捕获特定消息时,您可以采取相应的操作。比如用CTA作为字符串发送消息或者类似的东西。需要实现的逻辑
import WebKit

class PaymentGateWayViewController: UIViewController,UIWebViewDelegate,WKScriptMessageHandler{

var containerView = UIView()
var webView: WKWebView?


override func loadView() {
    super.loadView()
    containerView = UIView(frame: self.view.bounds)
    self.view.addSubview(containerView)
}

override func viewDidLoad() {
    super.viewDidLoad()
    let contentController = WKUserContentController();
    contentController.add(self,name: "paymentHandler")
    let config = WKWebViewConfiguration()
    config.userContentController = contentController
    self.webView = WKWebView(frame: self.containerView.bounds,configuration: config)
    self.view = self.webView!
}

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if(message.name == "paymentHandler") {
        print("JavaScript is sending a message \(message.body)")

}

}