从 swift 评估 javascript 函数,在完成处理程序中得到 nil

Evaluating javascript function from swift, getting nil in the completion handler

在我的 iOS 应用程序中,我在 WKWebView 中加载了一个 url,并在点击原生 iOS 按钮时调用了一个 java 脚本函数来执行.我正在使用以下方法来执行该功能。

let result = webView.evaluateJavaScript("saveUserTemplate()", completionHandler: {(response, error) in

            print(response as Any) 
            print(error as Any)

        })

现在,问题是,当触发完成处理程序时,我得到的响应和错误都是 nil。

请建议一些从 java 脚本函数获得响应的方法。

我没有得到 evaluateJavaScript 函数的响应,因为在服务器端调用 ajax 并且 javascript 函数没有等待 ajax 的执行完成打电话。

问题已使用 wkWebview 的脚本消息解决。

我为 webview 创建了配置,并在配置中添加了 contentController。

let contentController = WKUserContentController()
contentController.add(self, name: "cardSaved")
let config = WKWebViewConfiguration()
config.userContentController = contentController

webView = WKWebView(frame: CGRect(x: 10 , y : 10, width : UIScreen.main.bounds.width - 20, height : view.bounds.height - 150), configuration : config)

处理程序从 javascript 函数触发,例如:

webkit.messageHandlers.cardSaved.postMessage("Card Saved Succesfully");

从 javascript 端触发事件后,我的委托方法将被触发:

//MARK: - WKScriptMessageHandler Methods

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
    {
        if message.name == "cardSaved" {
            print(message.body)
        }
    }