如何检测UIWebView中的重定向

时间:2011-05-26 20:25:48

标签: ios cocoa-touch url 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:中的重定向链接。

如何判断这是重定向,而不是为页面上的图像或其他元素加载某些补充网站?目前我的网址栏显示的是上述示例中Google的长链接,而不是更新到维基百科网址。

3 个答案:

答案 0 :(得分:18)

您可以做的最好的事情是遵守webView:shouldStartLoadWithRequest:navigationType:委托方法。我假设重定向属于UIWebViewNavigationTypeOther

答案 1 :(得分:7)

现在有点晚了,但我会使用 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
   }
}

答案 2 :(得分:1)

我正在解决同样的问题。最初我遵循了这里的建议并使用maindocumenturl手动将URL输入到后退/前进导航的历史列表中。然而,这并没有提供非常准确的网址,无论你是否从didstartload或didfinishload获得了网址。如果你想感受我的痛苦,尝试浏览谷歌搜索,你会看到我在说什么,maindocumenturl在那个环境中是完全无用的。相比之下,webviewdidfinishload使用的绝对url属性工作得更好,实际上让用户创建一个可用的历史记录。那是我的两分钱。