📅  最后修改于: 2023-12-03 15:40:31.614000             🧑  作者: Mango
在 iOS 应用程序中,常常需要使用 WebView 来显示网页信息。在加载网页时,我们可能需要等待网页完成加载后才执行后续操作。那么,如何检查网页何时完成加载呢?
首先,我们需要创建一个 WebView 实例来加载网页。
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// 加载网页
let url = URL(string: "https://www.google.com")
let request = URLRequest(url: url!)
webView.load(request)
}
}
这里我们使用了 WKWebView,它是在 iOS 8 中引入的新的 WebView ,它比 UIWebView 性能更好。
接下来,我们使用 WKNavigationDelegate 监听网页的加载状态。WKNavigationDelegate 是 WKWebView 的导航代理,它包含了许多方法,可以让我们监测到 WebView 的各种状态,例如开始加载、加载完成、加载失败等。
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
// 加载网页
let url = URL(string: "https://www.google.com")
let request = URLRequest(url: url!)
webView.load(request)
}
// 加载完成
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("加载完成")
}
// 加载失败
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print("加载失败")
}
}
在上面的代码中,我们实现了两个 WKNavigationDelegate 的方法:didFinish 和 didFail。当网页加载完成时,didFinish 方法将被调用,我们可以在这个方法中执行后续操作;当网页加载失败时,didFail 方法将被调用。
如果你希望在网页加载完成后获取网页的标题,可以使用 WKWebView 的 title 属性。但是要注意的是,有些网页可能会通过 JavaScript 修改标题,这样你就需要在 WKNavigationDelegate 的方法中监听标题的变化。
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
// 加载网页
let url = URL(string: "https://www.google.com")
let request = URLRequest(url: url!)
webView.load(request)
}
// 加载完成
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("加载完成")
print(webView.title)
}
// 加载失败
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print("加载失败")
}
// 标题变化
func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
print(webView.title)
}
}
在上面的代码中,我们监听了 webView 的 didReceiveServerRedirectForProvisionalNavigation 事件,这个事件会在网页标题发生变化时被触发。
在 iOS 应用程序中使用 WebView 加载网页时,我们可以使用 WKNavigationDelegate 监听网页的加载状态,以便检测网页何时完成加载。此外,我们还可以监听页面标题的变化,在网页加载完成后获取网页的标题。