📜  检查 webview 何时完成加载 swift (1)

📅  最后修改于: 2023-12-03 15:40:31.614000             🧑  作者: Mango

检查 WebView 何时完成加载 in Swift

在 iOS 应用程序中,常常需要使用 WebView 来显示网页信息。在加载网页时,我们可能需要等待网页完成加载后才执行后续操作。那么,如何检查网页何时完成加载呢?

第一步:创建 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 监听网页的加载状态。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 监听网页的加载状态,以便检测网页何时完成加载。此外,我们还可以监听页面标题的变化,在网页加载完成后获取网页的标题。