Webページがユーザー名とパスワードまたは他のデータの送信時に別のページにリダイレクトする場合のように、WKWebViewを使用するときにリダイレクトURLをキャプチャするにはどうすればよいですか。リダイレクトされたURLをキャプチャする必要があります。 WKNavigationDelegateにオーバーライドするメソッドはありますか?
この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)
}
お役に立てれば
(これは、WKWebViewでURLリダイレクトを検出する方法についてのやや一般的な質問に答えます。これは、このページにつながる検索です。)
短い答え
WKNavigationDelegate
のwebView(_:didReceiveServerRedirectForProvisionalNavigation:)
関数を使用して、WKWebView
のURL
プロパティを調べます。
長い答え
サーバー側のリダイレクトを検出できる場所はいくつかあります。
IOS 10.3.3およびiOS 11.0では、サーバーによってリダイレクトされるURLをロードするときに観測されるイベントのシーケンスは次のとおりです。
WKNavigationDelegate
function webView(_:decidePolicyFor:decisionHandler:)
は、元のURL要求に対して呼び出されます。 WKWebView
のURL
プロパティは元のURLに設定されます。
WKNavigationDelegate
function webView(_:didStartProvisionalNavigation:)
は、元のURL要求に対して呼び出されます。 WKWebView
のURL
プロパティは元のURLに設定されます。
WKWebView
のURL
プロパティは、WebKitによってリダイレクトURLに更新されます。 (プロパティについてキー値を監視している場合にのみ、これについて知ることができます。)
WKNavigationDelegate
function webView(_:decidePolicyFor:decisionHandler:)
は、リダイレクトされたURL要求に対して呼び出されます。 WKWebView
のURL
プロパティはリダイレクトURLです。
WKNavigationDelegate
function webView(_:didReceiveServerRedirectForProvisionalNavigation:)
が呼び出されます。 WKWebView
のURL
プロパティはリダイレクトURLです。
(注:iOS 11.0シミュレーターでは、ステップ3と4が逆になっており、URL
プロパティがwebView(_:decidePolicyFor:decisionHandler:)
で変更されていません。これは実際には適切な順序のように見えますが、これはデバイス上で。)
webView(_:didReceiveServerRedirectForProvisionalNavigation:)
はリダイレクトを検出する目的で明示的に構築されているため、おそらく推奨オプションですが、ステップ3または4でリダイレクトを推測できる場合がありますが、ナビゲーションの変更の他の原因はありません。