首页 > 解决方案 > 如何将数据从 javascript 发送到 swift?

问题描述

我正在使用 swift 和 HTML/Javascript 做一个 iOS 混合应用程序。在 Android 中,我可以使用网络视图:

 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)

标签: javascriptswift

解决方案


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

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)")

}

}

推荐阅读