Ответ 1
Лучшее, что вы действительно можете сделать, это наблюдать за методом делегата webView:shouldStartLoadWithRequest:navigationType:
. Я предполагаю, что перенаправления попадают под UIWebViewNavigationTypeOther
.
Я использую UIWebView в качестве встроенного браузера в своем приложении. Проблема заключается в отслеживании URL-адреса, который должен отображаться в строке URL.
При выполнении поиска Google на странице результатов часто генерируются такие ссылки:
Когда пользователь нажимает на эту ссылку, UIWebView сначала сообщает эту ссылку, а затем перенаправляет ссылку в shouldStartLoadWithRequest:navigationType:
.
Как я могу сказать, что это перенаправление, а не какой-то дополнительный сайт, загружаемый для изображений или других элементов на странице? Поскольку он находится, моя строка URL отображает длинную ссылку от Google в приведенном выше примере, а не обновляется до URL Википедии.
Лучшее, что вы действительно можете сделать, это наблюдать за методом делегата webView:shouldStartLoadWithRequest:navigationType:
. Я предполагаю, что перенаправления попадают под UIWebViewNavigationTypeOther
.
Немного поздно, но я бы использовал методы делегирования webViewDidFinishLoad и webViewDidStartLoad для обнаружения перенаправления следующим образом:
- (void)webViewDidStartLoad:(UIWebView *)webView{
myRequestedUrl= [webView.request mainDocumentURL];
NSLog(@"Requested url: %@", myRequestedUrl);
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
myLoadedUrl = [webView.request mainDocumentURL];
NSLog(@"Loaded url: %@", myLoadedUrl);
//psudocode
if(myRequestedUrl is not the same as myLoadedUrl){
doSomething
}
}
Я работаю по этой же проблеме. Первоначально я следил за советом здесь и использовал maindocumenturl для ручного ввода URL-адресов в список истории для обратной/передовой навигации. Однако это не дало очень точных URL-адресов, независимо от того, получил ли вы URL-адрес от didstartload или didfinishload. Если вы хотите почувствовать мою боль, попробуйте перейти через поиск по Google, и вы увидите, о чем я говорю, maindocumenturl совершенно бесполезен в этой среде. Напротив, абсолютное свойство url, используемое с webviewdidfinishload, работает намного лучше и фактически позволяет пользователю создавать полезную историю. Это мои два цента.