Отримати поточну 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

ОП, враховуючи, що це питання має 78 тис. Переглядів, це досить добре посилається. Чи не заперечуєте ви оновлення прийнятої відповіді на значно більш голосовану, щоб запобігти майбутньому плутанині? Дякую!
Альберт Реншо

Відповіді:


45

Версія Метта набагато чистіша. Я рекомендую всім використовувати цей замість цього

Ви можете спробувати це:

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

Дякую. Мій код вище працює під час виконання в didFinishLoad .... Десь я читав, що версія js працює не на кожній сторінці. Але я спробую.
danielreiser

11
Метт його версія набагато чистіша. Так що так, я рекомендую всім використовувати цей замість цього.
Ренгерс

1
Це єдиний спосіб роботи, наприклад, на m.youtube.com. Усі інші відповіді повертають неправильні URL-адреси.
cprcrack

2
Я фактично оцінюю "document.URL", а не "window.location" (який для мене завжди був порожнім). Це корисно для внутрішніх налаштувань URL-адреси сторінки на важких сайтах JS, які можуть не використовувати традиційні завантаження сторінки.
SmartyP

1
Двоє людей вище - Aubada Taljo і Taranfx - Ренгерс відзначив досить сміливо (буквально, текст є жирним) і покірно, що люди повинні використовувати версію Метта, що містить понад 230 лайків нижче. Очевидно, що на момент відповіді на це він працював і був прийнятий, і 30+ людей відчули, що це теж працює. Це зараз 5,5 років. Гарні речі, Ренджери. Дякуємо, що вказували людей на відповідь Метта нижче.
додаток 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. Під час доступу до результатів пошуку з google він показує мені URL-адресу google, а не URL-адресу сторінки результатів пошуку. Будь-яка допомога .........
Нірав Гадхія

@iOSDeveloper Google, ймовірно, використовує стан "HTML5" для маніпулювання URL-адресою, яка не передбачає виконання іншого запиту (тому currentWebView.request не оновлюється).
danw

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

1
це працювало для мене, поки webView.request.URL.absoluteStringповернувсяnil
бендітрей

Дякую, це працювало і для мене, і це краще, ніж 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"];

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

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.