Как обнаружить перенаправление в UIWebView - PullRequest
21 голосов
/ 27 мая 2011

Я использую 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-адреса Википедии.

Ответы [ 3 ]

18 голосов
/ 27 мая 2011

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

7 голосов
/ 26 апреля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...