我想从WKWebView获取http://www.devpowerapi.com/fingerprint的内容
evaluateJavaScript("document.documentElement.innerHTML")
返回<head></head><body></body>
而不是实际的JSON
是否可以使用WKWebView获取内容?
答案 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解决方案。