Swift 3 - 检查 WKWebView 是否已加载页面

作者:编程家 分类: swift 时间:2025-04-28

使用 Swift 3 检查 WKWebView 是否已加载页面

在开发 iOS 应用程序时,我们经常需要使用 WebView 来加载网页内容。WKWebView 是 iOS 8 及更高版本中引入的一种现代化的 WebView 组件,其提供了更快速和高效的加载性能。在某些情况下,我们可能需要检查 WKWebView 是否已加载页面,以便在页面加载完成后执行特定的操作。本文将介绍如何使用 Swift 3 来实现这一功能。

步骤 1: 创建 WKWebView 实例

首先,我们需要在我们的应用程序中创建一个 WKWebView 实例。可以在视图控制器的 viewDidLoad 方法中添加以下代码来创建和配置 WKWebView:

swift

import UIKit

import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

var webView: WKWebView!

override func viewDidLoad() {

super.viewDidLoad()

let webConfiguration = WKWebViewConfiguration()

webView = WKWebView(frame: .zero, configuration: webConfiguration)

webView.navigationDelegate = self

view = webView

let url = URL(string: "https://www.example.com")

let request = URLRequest(url: url!)

webView.load(request)

}

// ... 其他视图控制器方法 ...

}

在上述代码中,我们创建了一个 WKWebView 实例,并将其设置为视图控制器的主视图。然后,我们加载了一个特定的网页内容。

步骤 2: 实现 WKNavigationDelegate

接下来,我们需要实现 WKNavigationDelegate 协议中的方法,以便在页面加载完成后收到通知。在视图控制器中添加以下代码:

swift

extension ViewController {

// 页面开始加载时调用

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {

print("页面开始加载")

}

// 页面加载完成时调用

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

print("页面加载完成")

// 在这里执行页面加载完成后的操作

// 比如显示其他 UI 元素、执行 JavaScript 代码等

}

// 页面加载失败时调用

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {

print("页面加载失败: \(error.localizedDescription)")

}

// ... 其他 WKNavigationDelegate 方法 ...

}

在上述代码中,我们实现了三个 WKNavigationDelegate 方法:webView(_:didStartProvisionalNavigation:)、webView(_:didFinish:) 和 webView(_:didFail:withError:)。在这些方法中,我们可以根据需要执行相应的操作,比如打印日志、显示其他 UI 元素、执行 JavaScript 代码等。

步骤 3: 检查页面加载状态

现在,我们可以使用一个布尔变量来追踪页面加载状态。在视图控制器中添加以下代码:

swift

extension ViewController {

var isPageLoaded: Bool {

return webView.isLoading == false

}

func checkPageLoaded() {

if isPageLoaded {

print("页面已加载")

// 在这里执行页面加载完成后的操作

// 比如显示其他 UI 元素、执行 JavaScript 代码等

} else {

print("页面未加载")

}

}

}

在上述代码中,我们定义了一个计算属性 isPageLoaded,该属性返回一个布尔值,表示页面是否已加载完成。然后,我们创建了一个名为 checkPageLoaded 的方法,该方法根据页面加载状态来执行相应的操作。

使用案例

下面是一个使用上述代码的简单示例:

swift

import UIKit

import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

var webView: WKWebView!

override func viewDidLoad() {

super.viewDidLoad()

let webConfiguration = WKWebViewConfiguration()

webView = WKWebView(frame: .zero, configuration: webConfiguration)

webView.navigationDelegate = self

view = webView

let url = URL(string: "https://www.example.com")

let request = URLRequest(url: url!)

webView.load(request)

checkPageLoaded()

}

extension ViewController {

// 页面开始加载时调用

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {

print("页面开始加载")

}

// 页面加载完成时调用

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

print("页面加载完成")

// 在这里执行页面加载完成后的操作

// 比如显示其他 UI 元素、执行 JavaScript 代码等

}

// 页面加载失败时调用

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {

print("页面加载失败: \(error.localizedDescription)")

}

var isPageLoaded: Bool {

return webView.isLoading == false

}

func checkPageLoaded() {

if isPageLoaded {

print("页面已加载")

// 在这里执行页面加载完成后的操作

// 比如显示其他 UI 元素、执行 JavaScript 代码等

} else {

print("页面未加载")

}

}

}

}

在上述示例中,我们在视图控制器的 viewDidLoad 方法中调用了 checkPageLoaded 方法来检查页面加载状态。根据打印输出,我们可以了解页面是否已加载完成,并在加载完成后执行相应的操作。

通过以上步骤,我们可以使用 Swift 3 来检查 WKWebView 是否已加载页面。这对于在页面加载完成后执行特定操作非常有用,比如显示其他 UI 元素、执行 JavaScript 代码等。希望本文对你在使用 WKWebView 进行开发时有所帮助!