Получить текущий URL UIWebView

110

Я уже пытался получать текущий URL моего UIWebViewс: webview.request.URL. К сожалению, он NSURLбыл пуст. Что-то здесь не так? Я работаю с Xcode 3.2.2 beta 5.

Приведенный выше код должен выполняться в UIWebViewделегате didStartLoad.

Дэниэлрайзер
источник
Сделайте этот код currentURL = currentWebView.request.URL.absoluteString; после загрузки веб-представления используйте - (void) webViewDidFinishLoad: (UIWebView *) webView. Может, это поможет.
Xcoder
OP, учитывая, что у этого вопроса 78k просмотров, на него довольно хорошо ссылаются. Не могли бы вы обновить принятый ответ на тот, который получил больше голосов, чтобы предотвратить путаницу в будущем? Спасибо!
Альберт Реншоу

Ответы:

45

Версия Мэтта намного чище. Я рекомендую всем использовать этот вместо этого

Вы можете попробовать это:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];
Rengers
источник
Спасибо. Мой код выше работает при выполнении в didFinishLoad .... Я где-то читал, что версия js не работает на каждой странице. Но я попытаюсь.
danielreiser
11
Мэтт, его версия намного чище. Так что да, я рекомендую всем использовать его вместо этого.
Rengers
1
Это единственный способ, например, на m.youtube.com. Все остальные ответы возвращают неправильные URL-адреса.
cprcrack
2
На самом деле я оцениваю "document.URL", а не "window.location" (который для меня всегда был пустым). Это полезно для внутренних корректировок URL-адреса страницы на сайтах с интенсивным использованием JS, которые могут не использовать традиционную загрузку страниц.
SmartyP 08
1
Обращаясь к двум людям выше - Аубаде Тальжо и Таранфксу - Ренгерс довольно смело (буквально, текст выделен жирным шрифтом) и смиренно отметил, что люди должны использовать версию Мэтта с более чем 230 лайками ниже. Очевидно, что на момент ответа на этот вопрос это сработало и было принято, и более 30 человек почувствовали, что это тоже работает. Сейчас ему 5,5 лет. Хороший материал, Ренджерс. Спасибо, что указали людям на ответ Мэтта ниже.
App Dev Guy
317

window.location через JS у меня не работал надежно, но это сработало:

currentURL = currentWebView.request.URL.absoluteString;

Кредит: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html

Мэтт Андерсен
источник
9
Вы получите неверный URL, если ваш сайт загрузит рекламу в другом запросе. Более четкий вариант написалMark Sands
OdNairy
не работает для результатов поиска гугла. При доступе к результатам поиска из Google он показывает мне URL-адрес Google, а не URL-адрес страницы результатов поиска. Любая помощь .........
Нирав Гадхия
@iOSDeveloper Google, вероятно, использует состояние push "HTML5" для управления URL-адресом, что не связано с выполнением другого запроса (поэтому currentWebView.request не обновляется).
danw 01
3
Этот метод, похоже, не работает, если веб-сайт сделал history.pushState
andrrs
1
В Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff
55

вот код, который я использую для получения URL-адреса каждый раз, когда вы переходите по другой ссылке в веб-просмотре:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}
Марк Сэндс
источник
когда я пытаюсь это сделать, метод никогда не вызывается. Могу я чего-то упустить?
Грег
1
@greg убедитесь, что вы назначили себя делегатом UIWebView
bendytree
1
это сработало для меня, пока я webView.request.URL.absoluteStringвернулсяnil
bendytree
Спасибо, это сработало и у меня, и это лучше, чем currentWebView.request.URL.absoluteString;
веб-хоббит
36

Я тоже обнаружил, что утвержденный ответ выше не был надежным. Но с небольшими изменениями, похоже, каждый раз работает:

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

Обратите внимание на добавление «.href» в Javascript, поскольку он скрыт в конце строки кода.

СараР
источник
2
Спасибо, SarahR, ваш метод работает, даже если UIWebView загрузил страницу лишь частично.
Дмитрий Макаренко
18

Это неверно и вернет ноль:

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

Однако приведенный ниже код может получить URL-адрес, но этот URL-адрес может не быть текущим URL-адресом:

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

Правильный:

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];
DD
источник
8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}
сивасанкар
источник
4

Пробовал это для результатов поиска Google на iPhone:

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

Оба возвращают одну и ту же строку!

Алекс Стоун
источник
3

вот код, который я использую:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];
BOBJ-С
источник
5
Вы создаете NSURL, получая строку из существующего NSURL; не могли бы вы просто скопировать webView.request.URL?
Паскаль
3

Поскольку UIWebView устарел, для WKWebview получить текущий URL-адрес очень просто.

webView.url
Крис Руф
источник
2

Я использую shouldStartLoadWithRequestсобытие (UIWebViewDelegate), чтобы отслеживать обновления URL. request.mainDocumentURL.absoluteStringпредоставит вам URL-адрес основной веб-страницы (обычно это то, что вы хотите), а также request.URL.absoluteStringбудет включать CSS и JavaScript.

Том Сёдерлунд
источник
2

Это всегда работает. .

NSString* url= [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];
Шайк Рияз
источник
2

реализовать метод делегата,

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

URL - это именно то, что вам нужно.

Гоби М
источник
1

IN Swift попробуйте это,

func webViewDidFinishLoad(webView: UIWebView){
    println(WebView.request?.mainDocumentURL)
}
Мохаммад Заид Патан
источник
1

Чтобы получить текущий URL-адрес WKWebView и UIWebview

Вот код.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Сталин Пушпарадж
источник