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

时间:2018-02-14 08:53:23

标签: javascript ios wkwebview

在我的iOS应用程序中,我在WKWebView中加载了一个URL,在本机iOS按钮上单击我正在调用一个javascript函数来执行。我正在使用以下方法来执行该函数。

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

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

        })

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

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

1 个答案:

答案 0 :(得分:0)

我没有得到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)
        }
    }