我正在尝试从第三方URL解析一些HTML元数据;但是,在-
中执行某些Javascript脚本之前,我无法获得完整的HTML数据。
因此,我一直在尝试检测WKWebView
何时已使用Java脚本完全加载了网页,但是很遗憾,我无法这么做。
这是我尝试过的:
WKWebView
并处理了协议方法,但这没有用,因为协议方法仅在收到脚本消息时才执行,而不是在完成时才执行。WKUserContentController
的{{1}}添加观察者,但WKWebView
在加载JS脚本之前返回1.0。estimatedProgress
协议方法estimatedProgress
,但这本质上与添加观察者相同。WKNavigationDelegate
方法中使用webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
的{{1}}方法来检查这两个方法:
WKWebView
evaluateJavaScript
但是那也不起作用,因为它是在JS完成加载之前执行的。
代码
这是我尝试过但不起作用的最后一种方法的代码:
初始化observeValue
document.readyState == \"interactive\"
处理观察者
document.readyState == \"completed\"
执行WKWebView
方法时得到的结果是 let webView = WKWebView(frame: self.view.frame)
webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
webView.load(URLRequest(url: url))
webView.navigationDelegate = self
self.view.addSubview(webView)
,因为它执行得太早了。但是我试图让观察者继续进行,直到override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "estimatedProgress" {
if let webView = object as? WKWebView, webView.estimatedProgress > 0.5 {
print(webView.estimatedProgress)
webView.evaluateJavaScript("document.readyState == \"interactive\"") { (isLoaded, err) in
print(isLoaded)
if let loaded = isLoaded as? Bool, loaded == true {
print("completely done loading with JS")
}
}
}
}
}
为真。
答案 0 :(得分:0)
要检查您的WKWebView是否已加载:
import WebKit
import UIKit
class ViewController: UIViewController, WKNavigationDelegate {
let webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.yourwebsite.com/") !
let request = URLRequest(url: url)
webView.navigationDelegate = self
webView.load(request)
}
func webView(_ webView: WKWebView, didStart navigation: WKNavigation!) {
print("Strat to load")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("loaded")
//It will print "loaded" in the console everytime the WKWebView has finished loading the page.
}
}
但这是针对每个资源的,而不是针对所有资源的整个页面。看看https://stackoverflow.com/a/43172313/3857830