Help us understand the problem. What is going on with this article?

【Swift】WKWebViewのリダイレクト先URL(URLスキーム)に応じて動作したい時にハマったこと

More than 3 years have passed since last update.

背景

iPhoneアプリで、WKWebViewでとあるURLを開き、何度かリダイレクトを挟んだ後に最終的にURLスキームにたどりついたときに、そのURLスキームに応じた動作をする必要がありました。しかし、URLスキームはリダイレクトしてくれなかったのでその解決方法です。

ViewController.swift
// リダイレクト時に呼ばれる関数
func webView(webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
        if let url = webView.URL?.absoluteString {
            // ここでURLに応じた処理を書く
        }
}

解決方法

didReceiveServerRedirectForProvisionalNavigationはデフォルトでは、http~とhttps~のみをリダイレクト対象として呼び出されるようでした。どのURLをリダイレクトとして扱うかのハンドリングをしている関数が、func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void)です。使い方は以下のとおり。

ViewController.swift
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
        if let url = navigationAction.request.URL?.absoluteString{
            if(url.hasPrefix("URLスキーム")){//この部分を処理したいURLにする
                // リダイレクトとして扱う
                decisionHandler(WKNavigationActionPolicy.Allow)
            }else if(url.hasPrefix("http")){
                decisionHandler(WKNavigationActionPolicy.Allow)
            }else{
                // リダイレクトとして扱わない
                decisionHandler(WKNavigationActionPolicy.Cancel)
            }
        }
}

この関数内でハンドリングを行うのですが、特定のURLリクエストに対して、Allowしてあげるとリダイレクトとして扱われ、didReceiveServerRedirectForProvisionalNavigationが呼び出されます。特定のURLやhttp~以外を弾きたかったので、今回はelseにCancelを書いています。

参考になれば幸いです。

_mogaming
Developer | Firebase系YouTuber moga.page.link/yt | プロトタイプ開発や新規サービス立ち上げが主な仕事 | ex) 実験, DeNA
https://twitter.com/_mogaming
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。
https://community.camp-fire.jp/projects/view/280040
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした