iPhone SDK:UIWebView停止图像加载/下载
如何在Xcode中使用UIWebView,使其在加载页面时不会下载图像(以加快加载页面)?成为UIWebView的代理,然后拦截调用:iPhone SDK:UIWebView停止图像加载/下载,iphone,objective-c,xcode,Iphone,Objective C,Xcode,如何在Xcode中使用UIWebView,使其在加载页面时不会下载图像(以加快加载页面)?成为UIWebView的代理,然后拦截调用: – webView:shouldStartLoadWithRequest:navigationType: 检查文档中navigationType的值。我相信在navigationType==UIWebViewNavigationTypeOtherUIWebView上返回NO对您来说是最好的选择。UIWebView是WebKit完整的WebView的一个苍白、可
– webView:shouldStartLoadWithRequest:navigationType:
检查文档中navigationType的值。我相信在
navigationType==UIWebViewNavigationTypeOtherUIWebView
上返回NO
对您来说是最好的选择。UIWebView是WebKit完整的WebView
的一个苍白、可怜的小阴影,这很容易做到<代码>-webView:shouldStartLoadWithRequest:navigationType:
仅为导航调用。它不会像mac上的WebPolicyDelegate
那样为每个请求调用。使用UIWebView
,我将如何解决这个问题:
实现
-webView:shouldStartLoadWithRequest:navigationType:
,并将其设置为始终返回否
。但您也将接受请求并生成一个NSURLConnection
。当NSURLConnection
完成获取数据后,您将在其中查找任何IMG标记,并将它们修改为您想要的任何占位符。然后,您将使用-loadHTMLString:baseURL:
将结果字符串加载到UIWebView
中
当然,在iPhone上解析HTML不是一件小事,Javascript加载程序会给你带来麻烦,所以这不是一个完美的答案,但这是我所知道的最好的答案。这真的会导致页面加载更快吗? 听起来这些图片仍在下载中,但我们只是没有将它们提供给UIWebView 或者应该先加载HTML文本吗?继续罗布的回答。
我注意到,当加载htmlstring:baseURL:并始终返回NO时,webView:shouldStartLoadWithRequest:navigationType:会不断被调用。(我怀疑loadHTMLString调用了另一个shouldStartLoadWithRequest) 所以我要做的是交替返回是/否 我使用NSScanner解析HTML并更改src=”http://...“to src=”
webView:shouldStartLoadWithRequest:navigationType:在下载发生后被调用。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if (pageHasNoImages==YES)
{
pageHasNoImages=FALSE;
return YES;
}
NSString* newHtml;
NSString* oldHtml;
NSData *urlData;
NSURLResponse *response;
NSError *error;
urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
oldHtml=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
newHtml=[self.detail scannerReplaceImg:oldHtml]; // my own function to parse HTML
newHtml=[self.detail scannerReplaceAds:newHtml]; // my own function to parse HTML
if (newHtml==nil)
{
NSLog(@"newHtml is nil");
newHtml=oldHtml;
}
[oldHtml release];
pageHasNoImages=TRUE;
[web loadHTMLString:newHtml baseURL:request.URL];
return NO;
}