我的问题: 如何使用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中知道这个问题的解决方案吗? 谢谢!
答案 0 :(得分:36)
回答(非常感谢@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.
}
}
结果:它将打印"已加载"每当WKWebView完成加载页面时,在控制台中。这正是我想要的,所以再次非常感谢Paulvs!
答案 1 :(得分:1)
设置代表> 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!) {
NSLog(@"Start loading");
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
NSLog(@"End loading");
}