javascript - 如何将数据从 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)
解决方案
嗨使用下面的代码。下面的代码一直在寻找来自 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)")
}
}
推荐阅读
- c# - 以下在本地主机上的开发工作,但在生产中没有
- dialogflow-es - DialogFlow 促销失败
- javascript - 如何减少对象数组?
- sql-server - 无法识别相同值之间的差异
- powershell - 将“下一个可用的 AD 计算机”添加到 power-shell 脚本
- sql-server - SQL中如何将单选参数转换为多个过滤值?
- c# - 实体类型不是当前上下文模型的一部分(C# - ASP.NET MVC)
- r - 为雨季和旱季制作专栏
- javascript - 如何在同时运行的多个 react.js 应用程序之间传递值?
- javascript - 有没有办法让 Tabulator 中的整行可点击到该行中包含每行唯一 URL 的单元格?