从 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)
}
}
在我的 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)
}
}