如何检测UIWebView中的redirect

我正在使用一个UIWebView作为我的应用程序中的embedded式浏览器。 我遇到的问题是跟踪应该显示在URL栏中的URL。

进行Googlesearch时,结果页面通常会生成如下链接:

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:redirect链接。

我怎么能告诉这是一个redirect,而不是一些补充站点加载的图像或页面上的其他元素? 在上面的例子中,我的URL栏显示了Google的长链接,而不是更新到Wikipedia URL。

最好的,你可以做的是观察webView:shouldStartLoadWithRequest:navigationType:委托方法。 我认为redirect属于UIWebViewNavigationTypeOther

现在有点晚,但我会使用webViewDidFinishLoadwebViewDidStartLoad委托方法来检测redirect,如下所示:

 - (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 } } 

我正在通过这个相同的问题。 最初,我遵循这里的build议,并使用maindocumenturl手动inputurl到后退/前进导航的历史列表。 然而,这并没有给出非常准确的url,无论你是否从didstartload或didfinishload得到的url。 如果你想感受我的痛苦,试着浏览谷歌search,你会看到我在说什么,maindocumenturl在那个环境中是完全无用的。 相比之下,webviewdidfinishload使用的绝对url属性效果更好,实际上可以让用户创build可用的历史logging。 那是我的两分钱