iPhone SDK:UIWebView用于停止加载/下载图像

时间:2009-02-25 17:12:03

标签: iphone objective-c xcode

如何在Xcode中使用UIWebView,以便在加载页面时不下载图像(以便加快页面加载速度)?

4 个答案:

答案 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文本吗?