简体   繁体   English

如何收听 Swift 的 JavaScript 回调?

[英]How to Listen to JavaScript CallBack from Swift?

I am implementing MPGS webView for payment on WKWebView in my iOS App the backend developer send me javascript callback on myHandler object.我正在我的 iOS 应用程序中实现 MPGS webView 以在WKWebView上付款,后端开发人员在 myHandler ZA8CFDE6331BD4BEB2666 上向我发送 javascript 回调

I should receive that handler which carry many callback for success or failure Or cancel (triggered when user click on cancel button in the webview) and in JS it look like this:我应该收到那个处理程序,它带有许多成功或失败的回调或取消(当用户单击 webview 中的取消按钮时触发),在 JS 中它看起来像这样:

window.webkit.MyHandler.postMessage('cancel');
window.MyHandler.cancelCallback();

I implement the receiving of that callbacks using:我使用以下方法实现接收该回调:

override func viewDidLoad() {
    super.viewDidLoad()
    let contentController = WKUserContentController()
    contentController.add(self, name: "MyHandler")
    let configuration = WKWebViewConfiguration()
    configuration.userContentController = contentController
    configuration.preferences = WKPreferences()
    configuration.preferences.javaScriptEnabled = true
    let url = URL(string: NetworkManager.mpgsBaseUrl + "/" + (MPGSWebView.url ?? ""))!
    let urlRequest = URLRequest(url: url)
    wkWebView = WKWebView(frame: .zero,configuration: configuration)
    wkWebView.navigationDelegate = self
    wkWebView.uiDelegate = self
    wkWebView.load(urlRequest)
    delegate = self.checkOutViewController
    view = wkWebView
}

The WKWebview is loaded but I am not receiving any events when I complete or cancel the webview print statement in the WKScriptMessageHandler delegate never executed: WKWebview已加载,但当我完成或取消WKScriptMessageHandler委托中的 webview 打印语句从未执行时,我没有收到任何事件:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print(message.name,"fff",message)
}

If anyone have an idea of how to receive that events I will be thankful.如果有人知道如何接收这些事件,我将不胜感激。 Best regards此致

You can try ( missing .messageHandlers. )您可以尝试(缺少.messageHandlers.

window.webkit.messageHandlers.MyHandler.postMessage("cancel");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM