从WKWebView获取JSON文本

时间:2019-06-18 18:42:45

标签: javascript ios swift wkwebview

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

一种可能更好的方法:

因此.innerHTML返回HTML,而不是JSON标头。众所周知,WKWebView很难获取JSON标头,但是您可以尝试使用此方法。第一组:

webView.navigationDelegate = self

然后在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)
}

答案 1 :(得分:0)

我不会说这是正确的解决方案,但是无论如何,这不是一个解决方案。该请求将在webView的上下文中进行。

webView.evaluateJavaScript("""
var Httpreq = new XMLHttpRequest(); // a new request
Httpreq.open("GET",'http://www.devpowerapi.com/fingerprint',false);
Httpreq.send(null);
Httpreq.responseText;
""",
    completionHandler: {
       (innerHTML, error) in
       print(innerHTML, error)
})

我确定您可以使用this thread中的任何JavaScript解决方案。