从 WKWebView 获取 JSON 文本

two*_*ate 2 javascript ios swift wkwebview

我想从 WKWebView获取http://www.devpowerapi.com/fingerprint的内容

evaluateJavaScript("document.documentElement.innerHTML")返回<head></head><body></body>而不是实际的 JSON

是否可以使用 WKWebView 获取内容?

jak*_*ake 5

最简单的方法(适用于这种特定情况):

webView.evaluateJavaScript("document.getElementsByTagName('pre')[0].innerHTML", completionHandler: { (res, error) in
     if let fingerprint = res {
          // Fingerprint will be a string of JSON. Parse here...
          print(fingerprint)
     }
})
Run Code Online (Sandbox Code Playgroud)

可能更好的方法来做到这一点:

因此.innerHTML返回 HTML,而不是 JSON 标头。JSON 标头是出了名的难以使用 来获取WKWebView,但您可以尝试此方法。第一组:

webView.navigationDelegate = self
Run Code Online (Sandbox Code Playgroud)

然后在WKNavigationDelegate方法中:

public func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
    let res = navigationResponse.response as! HTTPURLResponse
    let header = res.allHeaderFields
    print(header)
}
Run Code Online (Sandbox Code Playgroud)