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