未调用 WKNavigationDelegate 方法

Posted

技术标签:

【中文标题】未调用 WKNavigationDelegate 方法【英文标题】:WKNavigationDelegate method is not called 【发布时间】:2021-09-08 13:03:34 【问题描述】:

我目前正在使用 WKWebView 编写一个 web 视图应用程序,当加载页面时没有互联网连接时,它应该显示一个自定义错误页面。我试图通过调用 WKNavigationDelegate 的方法来处理这个问题,但它从未被调用过。我是 Swift 新手,我已经尝试了一些在 *** 上找到的解决方案,但没有一个对我有用。我做错了吗?

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate 

    var webView: WKWebView!
    
    override func loadView() 
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view = webView
    
    
    override func viewDidLoad() 
        super.viewDidLoad()
        let myURL = URL(string:"https://google.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    

    func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError)
    
        let url = Bundle.main.url(forResource: "no_connection", withExtension: "html")!
        webView.loadFileURL(url, allowingReadAccessTo: url)
        let request = URLRequest(url: url)
        webView.load(request)
    

【问题讨论】:

如果唯一的问题是您无法检查可达性,我可以建议您使用类似此处提出的解决方案:***.com/questions/30743408/… 另外,您是否尝试在函数内记录某些内容以查看它是否是实际上没有被调用并且您的资源没有问题? 【参考方案1】:

签名func(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) 不正确。 改用func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) 。 甚至应该有一个警告,告诉您在第一个签名中您没有使用委托函数:

【讨论】:

以上是关于未调用 WKNavigationDelegate 方法的主要内容,如果未能解决你的问题,请参考以下文章

单元测试 WKNavigationDelegate 函数 swift

Swift & ObjC 桥 - 找不到“WKNavigationDelegate”的协议声明

多个 WKWebView 实例的独立 webView didFinish WKNavigationDelegate 方法

iOS H5调用微信(支付宝)支付与回调

在 WKWebview 中使用本地资源

WKWebView基本使用