UIWebViewの現在のURLを取得する


110

私の現在のURLを取得しようとUIWebViewしました:webview.request.URL。残念ながらNSURL空でした。ここで何か問題がありますか?Xcode 3.2.2ベータ5を使用しています。

上記のコードはUIWebViewデリゲートで実行する必要がありますdidStartLoad


そのコードを実行しますcurrentURL = currentWebView.request.URL.absoluteString; Webビューが読み込まれた後、次を使用します-(void)webViewDidFinishLoad:(UIWebView *)webView。多分これは役立つかもしれません。
Xcoder、2014年

OP、この質問は78kのビューがあることを考えると、かなりよく参照されている質問です。将来の混乱を防ぐために、投票数の多い回答に対する承認済みの回答を更新していただけませんか。ありがとう!
Albert Renshaw 2017

回答:


45

マットのバージョンははるかにきれいです。私はこれの代わりにそれを使うことをみんなに勧めます

あなたはこれを試すことができます:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

ありがとう。上記のコードは、didFinishLoadで実行すると機能します。...どこかで、jsバージョンがすべてのページで機能するとは限りません。でもやってみます。
danielreiser

11
マット彼のバージョンははるかにきれいです。ええ、私は皆にこれの代わりにそれを使うことを勧めます。
レンジャーズ2012

1
これは、たとえばm.youtube.comで機能する唯一の方法です。他のすべての回答は間違ったURLを返します。
cprcrack 2013年

2
私は実際には「window.location」ではなく「document.URL」を評価しています(これは常に空白でした)。これは、従来のページ読み込みを使用しない可能性のあるJSの重いサイトでのページURLの内部調整に役立ちます。
SmartyP 2014

1
上記の2人の人々-Aubada TaljoとTaranfx-に、Rengersはかなり大胆に(文字通り、テキストは太字です)、謙虚に、人々は下に230以上のいいねを付けたMattのバージョンを使用すべきだと述べています。明らかにこれに答えた時点で、それは機能し、受け入れられ、30人以上の人が機能したと感じました。これは現在5.5年前のものです。レンジャーズ、いいものだ。以下のマットの答えを人々に教えてくれてありがとう。
App Dev Guy

317

JSを介したwindow.locationは確実に機能しませんでしたが、これは機能しました:

currentURL = currentWebView.request.URL.absoluteString;

クレジット:http : //mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
サイトが他のリクエストでいくつかの広告をロードする場合、間違ったURLを取得します。より明確なバリアントのMark Sands
記述

googleの検索結果では機能しません。グーグルから検索結果にアクセスしている間、それは私に検索結果ページのURLではなくグーグルのURLを表示しています。任意の助け.........
Nirav Gadhiya 2013年

@iOSDeveloper Googleはおそらく「HTML5」プッシュ状態を使用してURLを操作しますが、別の要求の実行は含まれません(したがって、currentWebView.requestは更新されません)。
danw 2013年

3
このメソッドは、Webサイトがhistory.pushStateを実行している場合は機能しないようです
。pushState

1
Swift 4の場合:webView.request?.mainDocumentURL?.absoluteString
DmitryKanunnikoff

55

これは、Webビュー内の別のリンクに移動するたびにURLを取得するために使用するコードです。

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}

これを試しても、メソッドが呼び出されることはありません。私が見逃している可能性があるものはありますか?
グレッグ

1
@gregは、UIWebViewのデリゲートとして自分自身を設定していることを確認してください
bendytree

1
これは私にwebView.request.URL.absoluteString戻って働いていたnil
bendytree 2012

おかげで、これも私にとってはうまくいき、currentWebView.request.URL.absoluteStringよりも優れています。
ウェブホビット2015

36

私も、上記の承認された回答が信頼できないことを発見しました。しかし、わずかな変更で、それは毎回うまくいくようです:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

「.href」がJavascriptに追加されていることに注意してください。これはコード行の最後に隠されているためです。


2
SarahRに感謝します。UIWebViewがページを部分的にロードした場合でも、このメソッドは機能します。
Dmitry Makarenko

18

これは正しくなく、nilを返します。

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

ただし、以下のコードはURLを取得できますが、URLが現在のURLではない場合があります。

NSString *url = _webView.request.URL.absoluteString;

正しいものは次のとおりです。

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}

4

iPhoneでグーグル検索結果のためにこれを試しました:

 NSString* currentURL = webView.request.URL.absoluteString;
 NSString* mainDocumentURL = webView.request.mainDocumentURL.absoluteString;

どちらも同じ文字列を返します!


3

ここで私が使用するコード:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];

5
既存のNSURLから文字列を取得してNSURLを作成しています。コピーできませんwebView.request.URLか?
Pascal


2

shouldStartLoadWithRequestイベント(UIWebViewDelegate)を使用して、URLの更新をキャッチします。request.mainDocumentURL.absoluteStringメインのWebページのURL(通常は必要なURL)を取得しますrequest.URL.absoluteStringが、CSSとJavaScriptが含まれます。



2

デリゲートメソッドを実装し、

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString  *URL = request.URL.absoluteString;    NSLog(@"%@",URL);
}

URLはまさに必要なものです。



1

WKWebViewおよびUIWebviewの現在のURLを取得するには

これがコードです。

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.