WkWebkiew完成页面加载后如何收听?

时间:2019-01-04 09:25:16

标签: swift wkwebview

我已经尝试过在stackoverflow上实现其他代码,但是没有运气。我正在WKWeview中评估javascript,并希望在内容完全加载后进行侦听,以便在加载的页面上执行语句。

Javascript :(未执行func webView)

webView.evaluateJavaScript("_formHist.submit();", completionHandler: nil)

到目前为止我尝试使用的代码:(仅在某些页面上有效)

    func webView(_ webView: WKWebView,
    didFinish navigation: WKNavigation!) {
    //insert code
    }

我是iOS开发的新手,所以请尽可能详细地解释答案!

2 个答案:

答案 0 :(得分:0)

_formHist的定义方式是什么?

如果尚未将其定义为javascript对象,它将无法正常工作。

除此之外,在执行代码时页面可能未完全加载,因此您可能需要侦听页面完全加载时触发的事件

如果您参考此answer,则它告诉您可以使用以下方法确定页面何时完全加载

document.addEventListener("DOMContentLoaded", function(event) { 
  //do work
});

因此,对于您的情况,您只需要使用此事件侦听器

webView.evaluateJavaScript("document.addEventListener("DOMContentLoaded", function(event) { _formHist.submit(); });", completionHandler: nil)

试一试,看看是否有效

答案 1 :(得分:0)

也许您想同时使它更加先进和简单,因此可以向用户显示估算进度,并确保可以检测到所有内容均已加载和完成,因此您可以执行任何操作。这是您的操作方法:

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