我的问题:如何使用Swift 3检查WKWebView中的页面是否已在Xcode中完全加载?
这是我的问题:
网页1:从这个页面我加载网页2
网页2:我需要从网页2获取html数据,但是当我打印HTML数据时,我得到网页1的HTML数据,这是我不想要的。但是当我在2秒后打印HTML数据时,它会为我提供正确的HTML数据。
我需要知道WKWebView中的页面是否完成加载。我可以在WebView中看到它已加载并且进度条已完全加载,但是当我打印页面的html数据时,我得到上一页的html数据,这不是我想要的。只有当我等待一秒钟它才能提供正确的数据,可能导致网页2被加载。
那么当下一页完全加载时,如何让Xcode打印html?
我尝试了几种方法:
也许我可以用:
如果webView.isloading {get}但我不知道如何实现此方法以及它是否应该工作。我已经尝试了Stack的几种方法,但这些方法对我不起作用或过时。
你们知道Swift 3中这个问题的解决方案吗?谢谢!
回答(非常感谢@paulvs)
要检查您的WKWebView是否已加载,请轻松实现以下方法:
import WebKit
import UIKit
class ViewController: UIViewController, WKNavigationDelegate {
let webView = WKWebView()
func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!) {
print("loaded")
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.yourwebsite.com/") !
let request = URLRequest(url: url)
webView.navigationDelegate = self
webView.load(request)
// Do any additional setup after loading the view, typically from a nib.
}
}
func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!) { print("loaded") }
结果:每次WKWebView加载页面时,它将在控制台中打印“已加载”。这正是我想要的,所以再次非常感谢Paulvs!
设置委托> WKNavigationDelegate
Objective-C的
// Start loading WKWebView
-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
NSLog(@"Start loading");
}
//Finished loading WKWebView
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
NSLog(@"End loading");
}
Swift 4.2
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print("Start loading")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("End loading")
}