我已经尝试过在stackoverflow上实现其他代码,但是没有运气。我正在WKWeview中评估javascript,并希望在内容完全加载后进行侦听,以便在加载的页面上执行语句。
Javascript :(未执行func webView)
webView.evaluateJavaScript("_formHist.submit();", completionHandler: nil)
到目前为止我尝试使用的代码:(仅在某些页面上有效)
func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!) {
//insert code
}
我是iOS开发的新手,所以请尽可能详细地解释答案!
答案 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
}
}