iPhone SDK:用于停止加载/下载图像的UIWebView
UIWebView
是WebKit完整的WebView
苍白,可怜的小阴影,为此很容易。 -webView:shouldStartLoadWithRequest:navigationType:
只会被调用导航。它不会在mac上为每个请求调用WebPolicyDelegate
。与UIWebView
,这里是我将如何攻击这个问题:
执行-webView:shouldStartLoadWithRequest:navigationType:
并将其设置为始终返回NO
。但你也会接受请求并产生一个NSURLConnection
。当NSURLConnection
完成提取数据时,您将通过它查看任何IMG标记并将其修改为任何您想要的占位符。然后,您将使用-loadHTMLString:baseURL:
将结果字符串加载到UIWebView
中。
当然在iPhone上解析HTML并不是一件简单的事情,Javascript的载入器会给你带来麻烦,所以这不是一个完美的答案,但它是我所知道的最好的。
是在UIWebView的委托,然后截取电话:navigationType的
– webView:shouldStartLoadWithRequest:navigationType:
检查值的文档。我相信你会得到最好的回报NO
在navigationType == UIWebViewNavigationTypeOther
。
这实际上是否导致页面加载速度更快? 它听起来像图像仍在下载,但我们只是没有喂它们到UIWebView。
还是shouldStartLoadWithRequest只是首先加载HTML文本?
扩展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;
}
webView:shouldStartLoadWithRequest:navigationType:在下载发生后被调用。 – Harry 2009-05-03 09:26:27