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)
}
}