web-dev-qa-db-ja.com

iOSのwkwebviewでリダイレクトURLをキャプチャする

Webページがユーザー名とパスワードまたは他のデータの送信時に別のページにリダイレクトする場合のように、WKWebViewを使用するときにリダイレクトURLをキャプチャするにはどうすればよいですか。リダイレクトされたURLをキャプチャする必要があります。 WKNavigationDelegateにオーバーライドするメソッドはありますか?

18
Prabu Raj

このWKNavigationDelegateメソッドを使用します

public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void)
    {
        if(navigationAction.navigationType == .other)
        {
            if navigationAction.request.url != nil
            {
                //do what you need with url
                //self.delegate?.openURL(url: navigationAction.request.url!)
            }
            decisionHandler(.cancel)
            return
        }
        decisionHandler(.allow)
    }

お役に立てれば

18
Reinier Melian

(これは、WKWebViewでURLリダイレクトを検出する方法についてのやや一般的な質問に答えます。これは、このページにつながる検索です。)

短い答え

WKNavigationDelegatewebView(_:didReceiveServerRedirectForProvisionalNavigation:)関数を使用して、WKWebViewURLプロパティを調べます。

長い答え

サーバー側のリダイレクトを検出できる場所はいくつかあります。

IOS 10.3.3およびiOS 11.0では、サーバーによってリダイレクトされるURLをロードするときに観測されるイベントのシーケンスは次のとおりです。

  1. WKNavigationDelegate function webView(_:decidePolicyFor:decisionHandler:)は、元のURL要求に対して呼び出されます。 WKWebViewURLプロパティは元のURLに設定されます。

  2. WKNavigationDelegate function webView(_:didStartProvisionalNavigation:)は、元のURL要求に対して呼び出されます。 WKWebViewURLプロパティは元のURLに設定されます。

  3. WKWebViewURLプロパティは、WebKitによってリダイレクトURLに更新されます。 (プロパティについてキー値を監視している場合にのみ、これについて知ることができます。)

  4. WKNavigationDelegate function webView(_:decidePolicyFor:decisionHandler:)は、リダイレクトされたURL要求に対して呼び出されます。 WKWebViewURLプロパティはリダイレクトURLです。

  5. WKNavigationDelegate function webView(_:didReceiveServerRedirectForProvisionalNavigation:)が呼び出されます。 WKWebViewURLプロパティはリダイレクトURLです。

(注:iOS 11.0シミュレーターでは、ステップ3と4が逆になっており、URLプロパティがwebView(_:decidePolicyFor:decisionHandler:)で変更されていません。これは実際には適切な順序のように見えますが、これはデバイス上で。)

webView(_:didReceiveServerRedirectForProvisionalNavigation:)はリダイレクトを検出する目的で明示的に構築されているため、おそらく推奨オプションですが、ステップ3または4でリダイレクトを推測できる場合がありますが、ナビゲーションの変更の他の原因はありません。

19
user2067021