Подтвердить что ты не робот

Как определить перенаправление в UIWebView

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

При выполнении поиска Google на странице результатов часто генерируются такие ссылки:

http://www.google.com/url?sa=t&source=web&cd=1&ved=0CC4QFjAA&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDog&rct=j&q=dogs&ei=27XeTc6RFIWEvAO858DHBQ&usg=AFQjCNGkEDcWzea4pSlurHhcuQfqFcp_pw

Когда пользователь нажимает на эту ссылку, UIWebView сначала сообщает эту ссылку, а затем перенаправляет ссылку в shouldStartLoadWithRequest:navigationType:.

Как я могу сказать, что это перенаправление, а не какой-то дополнительный сайт, загружаемый для изображений или других элементов на странице? Поскольку он находится, моя строка URL отображает длинную ссылку от Google в приведенном выше примере, а не обновляется до URL Википедии.

4b9b3361

Ответ 1

Лучшее, что вы действительно можете сделать, это наблюдать за методом делегата webView:shouldStartLoadWithRequest:navigationType:. Я предполагаю, что перенаправления попадают под UIWebViewNavigationTypeOther.

Ответ 2

Немного поздно, но я бы использовал методы делегирования 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
   }
}

Ответ 3

Я работаю по этой же проблеме. Первоначально я следил за советом здесь и использовал maindocumenturl для ручного ввода URL-адресов в список истории для обратной/передовой навигации. Однако это не дало очень точных URL-адресов, независимо от того, получил ли вы URL-адрес от didstartload или didfinishload. Если вы хотите почувствовать мою боль, попробуйте перейти через поиск по Google, и вы увидите, о чем я говорю, maindocumenturl совершенно бесполезен в этой среде. Напротив, абсолютное свойство url, используемое с webviewdidfinishload, работает намного лучше и фактически позволяет пользователю создавать полезную историю. Это мои два цента.