在我的iOS应用程序中,我在WKWebView中加载了一个URL,在本机iOS按钮上单击我正在调用一个javascript函数来执行。我正在使用以下方法来执行该函数。
let result = webView.evaluateJavaScript("saveUserTemplate()", completionHandler: {(response, error) in
print(response as Any)
print(error as Any)
})
现在,问题是,当触发完成处理程序时,我得到的响应和错误都是nil。
请建议一些从java脚本函数获取响应的方法。
答案 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)
}
}