Получить текущий 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"];

Спасибо. Мой код выше работает при выполнении в 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"];


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]]];

5
Вы создаете NSURL, получая строку из существующего NSURL; не могли бы вы просто скопировать webView.request.URL?
Паскаль


2

Я использую shouldStartLoadWithRequestсобытие (UIWebViewDelegate), чтобы отслеживать обновления URL. request.mainDocumentURL.absoluteStringпредоставит вам 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

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

Вот код.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.