如何监听 WkWebkiew 何时完成加载页面?
How to listen for when WkWebkiew has finished loading page?
我试过在 Whosebug 上实现其他代码,但没有成功。我正在 WKWeview 中评估 javascript,并希望监听内容何时完全加载以便在加载的页面上执行语句。
Javascript: (没有执行 func webView)
webView.evaluateJavaScript("_formHist.submit();", completionHandler: nil)
到目前为止我尝试使用的代码:(仅适用于某些页面)
func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!) {
//insert code
}
我是 iOS 开发的新手,所以如果可以,请深入解释答案!
_formHist
是怎么定义的??
如果这还没有定义为 javascript 对象,它将不起作用。
除此之外,页面在执行代码时可能未完全加载,因此您可能需要监听页面完全加载时触发的事件
如果你参考这个 answer 它告诉你可以使用以下方法确定页面何时完全加载
document.addEventListener("DOMContentLoaded", function(event) {
//do work
});
所以对于你的情况,你只需要使用这个事件监听器
webView.evaluateJavaScript("document.addEventListener("DOMContentLoaded", function(event) { _formHist.submit(); });", completionHandler: nil)
试一试,看看是否有效
也许你想让它既高级又简单,这样你就可以为用户显示估计进度,然后你可以检测到一切都已加载并完成,这样你就可以做任何你想做的事了.方法如下:
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "estimatedProgress" {
print(Float(webView.estimatedProgress))
//Do whatever you want when finished
}
}
我试过在 Whosebug 上实现其他代码,但没有成功。我正在 WKWeview 中评估 javascript,并希望监听内容何时完全加载以便在加载的页面上执行语句。
Javascript: (没有执行 func webView)
webView.evaluateJavaScript("_formHist.submit();", completionHandler: nil)
到目前为止我尝试使用的代码:(仅适用于某些页面)
func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!) {
//insert code
}
我是 iOS 开发的新手,所以如果可以,请深入解释答案!
_formHist
是怎么定义的??
如果这还没有定义为 javascript 对象,它将不起作用。
除此之外,页面在执行代码时可能未完全加载,因此您可能需要监听页面完全加载时触发的事件
如果你参考这个 answer 它告诉你可以使用以下方法确定页面何时完全加载
document.addEventListener("DOMContentLoaded", function(event) {
//do work
});
所以对于你的情况,你只需要使用这个事件监听器
webView.evaluateJavaScript("document.addEventListener("DOMContentLoaded", function(event) { _formHist.submit(); });", completionHandler: nil)
试一试,看看是否有效
也许你想让它既高级又简单,这样你就可以为用户显示估计进度,然后你可以检测到一切都已加载并完成,这样你就可以做任何你想做的事了.方法如下:
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "estimatedProgress" {
print(Float(webView.estimatedProgress))
//Do whatever you want when finished
}
}