我该如何在Xcode中使用UIWebView,以便在加载页面时不下载图像(从而获得更快的加载速度)?
我该如何在Xcode中使用UIWebView,以便在加载页面时不下载图像(从而获得更快的加载速度)?
UIWebView
是Webkit完整版WebView
的弱化版本,因此解决这个问题相对较为困难。只有在导航时才会调用-webView:shouldStartLoadWithRequest:navigationType:
,而不像Mac上的WebPolicyDelegate
那样对每个请求都进行调用。对于UIWebView
,我会采用以下方法解决这个问题:
实现-webView:shouldStartLoadWithRequest:navigationType:
, 并将其设置为始终返回NO
。但你还要获取请求并创建一个NSURLConnection
。当NSURLConnection
完成数据抓取后,你需要搜索其中的所有IMG标签,并将它们修改为所需的占位符。然后使用-loadHTMLString:baseURL:
将结果字符串加载到UIWebView
中。
当然,在iPhone上解析HTML并不是一项微不足道的任务,而且JavaScript加载器可能会给你带来麻烦,因此这并不是完美的答案,但这是我所知道的最好的方法。
- (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;
}
– webView:shouldStartLoadWithRequest:navigationType:
请查看文档中navigationType的值。我认为最好在navigationType == UIWebViewNavigationTypeOther
时返回NO
。
这样做实际上会加快页面加载吗? 听起来好像图片仍在下载,只是我们没有把它们提供给UIWebView。
或者shouldStartLoadWithRequest只是先加载HTML文本?