Ios 如何在UIWebView中检测重定向

Ios 如何在UIWebView中检测重定向,ios,cocoa-touch,url,uiwebview,Ios,Cocoa Touch,Url,Uiwebview,我正在应用程序中将UIWebView用作嵌入式浏览器。我遇到的问题是跟踪应该显示在URL栏中的URL 在进行谷歌搜索时,结果页面通常会生成如下链接: 当用户单击此链接时,UIWebView首先报告此链接,然后在中报告重定向的链接shouldStartLoadWithRequest:navigationType: 我如何判断这是一个重定向,而不是为页面上的图像或其他元素加载一些补充站点?在上面的例子中,我的URL栏显示的是来自Google的长链接,而不是更新到Wikipedia URL。你能做的

我正在应用程序中将UIWebView用作嵌入式浏览器。我遇到的问题是跟踪应该显示在URL栏中的URL

在进行谷歌搜索时,结果页面通常会生成如下链接:

当用户单击此链接时,UIWebView首先报告此链接,然后在
中报告重定向的链接shouldStartLoadWithRequest:navigationType:


我如何判断这是一个重定向,而不是为页面上的图像或其他元素加载一些补充站点?在上面的例子中,我的URL栏显示的是来自Google的长链接,而不是更新到Wikipedia URL。

你能做的最好的事情就是观察
webView:shouldStartLoadWithRequest:navigationType:
delegate方法。我假设重定向属于
UIWebViewNavigationTypeOther

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

- (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手动输入到历史记录列表中,以便进行向后/向前导航。然而,无论您是从didstartload还是didfinishload获得url,这并没有给出非常准确的url。如果你想感受我的痛苦,试着在谷歌搜索中导航,你会看到我在说什么,maindocumenturl在那种环境下是完全无用的。相比之下,webviewdidfinishload使用的绝对url属性工作得更好,并且实际上允许用户创建可用的历史记录。这是我的两分钱。

UIWebViewNavigationType
仅表示用户在启动请求时的操作,它不提供服务器正在执行的操作的任何详细信息。您尝试过此操作吗?我发现
webviewditstartoad:
提供的
webView
request
属性不可靠。最好存储用于加载UIWebView的原始请求,并将其与
webViewDidFinishLoad:
提供的请求进行比较。是的,这也是一个好主意,但我在WebViewDidLoad中的印象是请求只给出了输入请求。虽然我已经测试过了,但它确实可以工作,尽管在复杂的情况下可能会出现问题。我发现
webviewdistartoad
返回一个
NSMutableURLRequest
,该请求为空,因此不能用太多。没有做任何显式复杂的事情,只是使用
loadRequest:
加载网站,网站加载很好,否则
webviewdiffinishload
会正确返回请求。我的网站上有一个教程,告诉你如何做。退房在本教程的末尾,有可下载的源代码,您可以在自己的项目中免费使用。如果它符合你的要求,请告诉我。如果没有,也许我可以建议你如何修改它。谢谢。我仍然无法确定是否检测到重定向,但使用[request mainDocumentURL]我认为可以满足我的需要。不可用anymore@drct什么不再可用?链接的教程和源代码是(刚刚重新检查过),并且-[NSURLRequest main documentURL]仍然可用(请参阅)抱歉,仍然可用。但问题是,在您的教程中,您在哪里检测到重定向?