我在我的应用程序中使用UIWebView作为嵌入式浏览器,但问题是如何跟踪URL栏应该显示的网址。
在进行谷歌搜索时,结果页面通常会生成如下链接:
当用户点击此链接时,UIWebView首先会在shouldStartLoadWithRequest:navigationType:
方法中报告此链接,然后才是重定向的链接。
我该如何判断这是一个重定向而不是加载页面上的图像或其他元素的补充站点?目前,我的URL栏显示的是上面谷歌链接中的长链接,而不是更新为维基百科的URL。
我在我的应用程序中使用UIWebView作为嵌入式浏览器,但问题是如何跟踪URL栏应该显示的网址。
在进行谷歌搜索时,结果页面通常会生成如下链接:
当用户点击此链接时,UIWebView首先会在shouldStartLoadWithRequest:navigationType:
方法中报告此链接,然后才是重定向的链接。
我该如何判断这是一个重定向而不是加载页面上的图像或其他元素的补充站点?目前,我的URL栏显示的是上面谷歌链接中的长链接,而不是更新为维基百科的URL。
你能做的最好的是观察webView:shouldStartLoadWithRequest:navigationType:
委托方法。我认为重定向属于UIWebViewNavigationTypeOther
。
UIWebViewNavigationType
只表示用户发起请求的操作,它并不提供有关服务器正在执行什么操作的任何详细信息。 - user577537虽然有点晚,但我会使用 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
}
}
webViewDidStartLoad:
提供的webView
的request
属性不可靠。最好是存储用于加载UIWebView的原始请求,并将其与webViewDidFinishLoad:
提供的请求进行比较。 - user577537webViewDidStartLoad
返回的NSMutableURLRequest
是空的,因此不能用于太多事情。并没有做任何复杂的操作,只是使用loadRequest:
加载网站,网站加载正常,否则webViewDidFinishLoad
会正确返回请求。 - user577537