如何监听 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
        }
    }