如何在Xcode中使用UIWebView,以便在加载页面时不下载图像(以便加快页面加载速度)?
答案 0 :(得分:4)
UIWebView
是WebKit的完整WebView
的苍白,可怜的小阴影,这很容易。只会调用-webView:shouldStartLoadWithRequest:navigationType:
进行导航。对于WebPolicyDelegate
之类的每个请求都不会调用它。使用UIWebView
,我将如何解决此问题:
实施-webView:shouldStartLoadWithRequest:navigationType:
并将其设置为始终返回NO
。但是你也会接受请求并产生NSURLConnection
。当NSURLConnection
完成获取数据时,您将查看任何IMG标记并将其修改为您想要的任何占位符。然后,您将使用UIWebView
将结果字符串加载到-loadHTMLString:baseURL:
。
当然,在iPhone上解析HTML并不是一项微不足道的任务,Javascript加载器会给你带来麻烦,所以这不是一个完美的答案,但它是我所知道的最好的。
答案 1 :(得分:1)
扩大Rob的答案。 我注意到当loadHTMLString:baseURL:并且总是返回NO时,那个webView:shouldStartLoadWithRequest:navigationType:只是不断被调用。 (我怀疑loadHTMLString调用另一个shouldStartLoadWithRequest)。
所以我要做的就是在返回YES / NO之间交替 我使用NSScanner解析HTML并将src =“http:// ...”更改为src =“”
- (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;
}
答案 2 :(得分:0)
成为UIWebView的委托,然后拦截调用:
– webView:shouldStartLoadWithRequest:navigationType:
检查文档中的navigationType值。我相信通过NO
返回navigationType == UIWebViewNavigationTypeOther
,您将得到最好的服务。
答案 3 :(得分:0)
这实际上会导致页面加载速度更快吗? 听起来这些图像仍在下载,但我们并没有将它们提供给UIWebView。
或者应该是StartLoadWithRequest只是先加载HTML文本吗?