首页 文章

如何让WKWebView.evaluateJavaScript在函数调用中返回数据

提问于
浏览
1

我正在研究一些WKWebView解析例程 . 我正在尝试通过检查它的document.title来验证我已正确导航到页面 . 我写了一个函数来完成这项工作,但我似乎无法弄清楚如何从函数返回HTML数据或在函数中进行评估并返回BOOL . 我知道我在这里做异步调用,但不知道如何等待该调用结束并从我的函数调用中返回响应 .

这是我的功能:

func checkTitle (forWebView webView: WKWebView, title: String) -> String{


webView.evaluateJavaScript("document.title", completionHandler: { (innerHTML, error ) in
    let titleString = innerHTML as? String

    return (titleString)

})

这会引发编译器错误 . 我试图在调用之外声明变量,然后在之后分配并返回它,但它尝试在异步调用完成之前执行该变量 .

1 回答

  • 1

    你应该使用一个完成处理程序,如下所示:

    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)  
        })
    }
    

相关问题