如何在函数调用中获取 WKWebView.evaluateJavaScript 到 return 数据
How do I get WKWebView.evaluateJavaScript to return data in a function call
我正在研究一些 WKWebView 解析例程。我正在尝试通过检查 document.title 来验证我是否已正确导航到页面。我写了一个函数来完成这项工作,但我似乎无法弄清楚如何 return 来自函数的 HTML 数据或在函数中进行评估和 return a BOOL .我知道我在这里进行异步调用,但不确定如何等待该调用结束并从我的函数调用中反馈响应。
这是我的函数:
func checkTitle (forWebView webView: WKWebView, title: String) -> String{
webView.evaluateJavaScript("document.title", completionHandler: { (innerHTML, error ) in
let titleString = innerHTML as? String
return (titleString)
})
这会引发编译器错误。我试图在调用之外声明变量,然后分配并 return 它之后,但它试图在异步调用完成之前执行它。
你应该使用完成处理程序,像这样:
func checkTitle (forWebView webView: WKWebView, title: String, completion: @escaping (_ titleString: String?) -> Void) {
webView.evaluateJavaScript("document.title", completionHandler: { (innerHTML, error ) in
// Logic here
completion(innerHTML as? String)
})
}
我正在研究一些 WKWebView 解析例程。我正在尝试通过检查 document.title 来验证我是否已正确导航到页面。我写了一个函数来完成这项工作,但我似乎无法弄清楚如何 return 来自函数的 HTML 数据或在函数中进行评估和 return a BOOL .我知道我在这里进行异步调用,但不确定如何等待该调用结束并从我的函数调用中反馈响应。
这是我的函数:
func checkTitle (forWebView webView: WKWebView, title: String) -> String{
webView.evaluateJavaScript("document.title", completionHandler: { (innerHTML, error ) in
let titleString = innerHTML as? String
return (titleString)
})
这会引发编译器错误。我试图在调用之外声明变量,然后分配并 return 它之后,但它试图在异步调用完成之前执行它。
你应该使用完成处理程序,像这样:
func checkTitle (forWebView webView: WKWebView, title: String, completion: @escaping (_ titleString: String?) -> Void) {
webView.evaluateJavaScript("document.title", completionHandler: { (innerHTML, error ) in
// Logic here
completion(innerHTML as? String)
})
}