9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Swift]WKNavigationDelegateの要点まとめ

Last updated at Posted at 2021-07-01

この記事の経緯

仕事でWKNavigationDelegateを用いてwebViewを管理することがあり、知らなかったこととかもあったので投稿します。

開発環境

Swift version 5.4.2
Xcode version 12.5.1

webViewはxibで実装
WKNavigationDelegateはコードで実装
web側で開発したLP(ライディングページ)のボタンのアクションをアプリ側(Swift)で操る実装

エラー用Delegateは2つある

1, didFail

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

didFailの用途は読み込み途中にエラーが発生した場合に呼ばれる。
例えば、webViewのload中にアプリを閉じたなど。

2, didFailProvisionalNavigation

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
    print("didFailProvisionalNavigation: \(error)")
}

didFailProvisionalNavigationの用途は読み込み開始時にエラーが発生した場合に呼ばれる。
例えば、圏外だった場合など。

どちらか一方しか記述していない場合、エラー発生の原因捜査で苦労します。

webView内での遷移に関する値はLinkActivatedだけではない

LinkActivated // aタグによる遷移
FormSubmitted // フォームの送信による遷移
BackForward // 進む、戻るによる遷移
Reload // 更新による遷移
FormResubmitted // フォームの再送信による遷移
Other // その他の方法による遷移

LPから課金画面に遷移する実装をしていたので、ついLinkActivatedを気にしていましたが、少し調べると色々出てきました。
navigationAction.navigationTypeで指定して扱いましょう。

よく使うDelegateまとめ

func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
    // 遷移開始時に呼ばれる
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    // ページ読み込みが開始されたときに呼ばれる
}
func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
    // リダイレクトした時に呼ばれる
}
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
   // 読み込み開始時にエラーが発生した場合に呼ばれる
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
   // 読み込み途中にエラーが発生した場合に呼ばれる
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    // 読み込み完了時に呼ばれる
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    // webサイトにリクエストを送る場合に呼ばれる
}
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping {
    // webサイトからのレスポンスを受け取る場合に呼ばれる
}
func webView(_ webView: WKWebView, authenticationChallenge challenge: URLAuthenticationChallenge, shouldAllowDeprecatedTLS decisionHandler: @escaping (Bool) -> Void) {
    // 認証が必要な場合に呼ばれる
}

今回はWKNavigationDelegateの要点をまとめました。
ぜひ参考にしてください!

お知らせ

現在、iOSアプリ開発の週末バイトや、就業後にできる開発案件(副業)を探しております。
ご依頼はTwitter DMまでお願いします。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?