web-dev-qa-db-ja.com

WKWebViewの現在の完全なURLを取得します

リクエストごとにWKWebViewによって読み込まれた完全なURLを取得する方法はありますか?

webView:didFinishNavigation:

mainFrameナビゲーションでのみ機能し、URL要求パラメーターは提供しません。

UIWebViewDelegateのように完全なURLを取得する方法

webViewDidFinishLoad:webView

...読み込みが完了すると呼び出され、webViewパラメータから完全なリクエストURLを取得できます。

WKWebViewURLプロパティがUIに適したベースURLを抽出するために必要な作業を保存するのは素晴らしいことですが、完全なURLを取得することはできません。

私は使用してみました

webView:decidePolicyForNavigationAction:decisionHandler:

...しかし、ページのロードが完了した後にUIWebViewrequestプロパティが保持するものと比較して、URLに対して異なる結果を生成します。

19
i-konov

まず、NSURLNSURLRequestを混同していると思います。最初はwebView.URLを介して簡単にアクセスでき、実際にロードされたものの完全なURLを提供します。 [〜#〜] url [〜#〜]と言う場合は、NSURLを意味すると仮定します。

それが意図したものではない場合、たとえば、リダイレクトチェーンや応答ヘッダーを表示したい場合、WKWebViewを介して特定の情報を取得できないという答えが怖いです。

UIWebViewにフォールバックする必要があります。ここでは、リクエストを比較的簡単にインターセプトして、リクエスト/レスポンス全体を確認できます。

12
Stefan Arentz

新しくリクエストされたWebページのURLは、decidePolicyForNavigationActionデリゲートメソッドの「navigationAction.request.URL」で取得できます。

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
   if let urlStr = navigationAction.request.URL?.absoluteString{
      //urlStr is what you want, I guess.
   }
   decisionHandler(.Allow)
}
16
Yuichi Kato