我在我的应用程序中使用UIWebView作为嵌入式浏览器。我遇到的问题是跟踪应在URL栏中显示的URL。
进行Google搜索时,结果页面通常会生成如下链接:
当用户点击此链接时,UIWebView会首先报告此链接,然后报告shouldStartLoadWithRequest:navigationType:
中的重定向链接。
如何判断这是重定向,而不是为页面上的图像或其他元素加载某些补充网站?目前我的网址栏显示的是上述示例中Google的长链接,而不是更新到维基百科网址。
答案 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属性工作得更好,实际上让用户创建一个可用的历史记录。那是我的两分钱。