【Swift】WKNavigationDelegateについて

Swift

WKNavigationDelegateとは

webViewのナビゲーションイベントをハンドリングするためのプロトコルです。

実装方法

class ViewController: UIViewController, WKNavigationDelegate {
    @IBOutlet weak var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        webView.navigationDelegate = self
        
        if let url = URL(string: "https://example.com") {
            webView.load(URLRequest(url: url))
        }
    }
    
    // WKNavigationDelegate methods here
}

操作方法

ページの読み込みを制御する

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    // URLのホスト名がexample.comの場合のみページを読み込む
    if let host = navigationAction.request.url?.host, host.contains("example.com") {
        decisionHandler(.allow)
    } else {
        decisionHandler(.cancel)
    }
}

ページの読み込みが完了したことを検知する

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    // ページの読み込みが完了したことを検知する処理
}

ページの読み込みが失敗したことを検知する

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
    // ページの読み込みが失敗したことを検知する処理
}

SSL証明書の検証を制御する

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
    guard let urlResponse = navigationResponse.response as? HTTPURLResponse else {
        decisionHandler(.allow)
        return
    }
    
    // SSL証明書の検証を無視する
    if urlResponse.statusCode == 200 {
        decisionHandler(.allow)
    } else {
        decisionHandler(.cancel)
    }
}

Buy me a coffee!

Swiftアプリ開発
シェアする
sogaをフォローする
タイトルとURLをコピーしました