从 WKWebView 获取 JSON 文本

Get JSON text from WKWebView

我想从 WKWebView

中获取 http://www.devpowerapi.com/fingerprint 的内容

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

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

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

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 returns HTML,不是 JSON header。 JSON header 是出了名的难以用 WKWebView 抓取的,但是您可以为此尝试这种方法。第一组:

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

我不会说这是正确的解决方案,但它是一个解决方案 none,越少越好。请求将在 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 解决方案。