如何仅加载HTML + CSS + JS并停止在Cocoa WebView上加载图像

时间:2015-10-18 10:46:31

标签: objective-c macos cocoa webview osx-elcapitan

我试图通过将网址加载到屏幕外网页视图并使用WebScriptObject及其evaluateWebScript:方法通过Javascript进行交互来模仿网站上的真实用户行为。网页上有很多图像,我不想加载任何图像,因为我不需要它们,它们会消耗太多带宽并减慢加载时间。如何让Web视图加载所有内容以便在窗口上执行Javascript(HTML JS和CSS文件及其依赖项,如果有的话),但是阻止加载任何媒体?

1 个答案:

答案 0 :(得分:2)

经过一番挣扎,我找到了解决问题的简单方法。如果图像网址的格式正确(例如以#结尾)及其各自的扩展名,则此方法有效:

-(NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource{
    BOOL isRequestImage = [self isRequestImage:request];
    if(isRequestImage){
        return nil; //don't bother loading images
    }
    ...
}

其中:

-(BOOL)isRequestImage:(NSURLRequest*)request{
    NSString *absoluteString = [request.URL.absoluteString lowercaseString];
    if([absoluteString hasSuffix:@".png"] || [absoluteString hasSuffix:@".jpg"] || [absoluteString hasSuffix:@".jpeg"]){
        return YES;
    }
    return NO;
}

我访问的网站上的所有图片都有jpgpng分机,为方便起见,我还包括jpeg它显然可以很容易地扩展到任何扩展,包括但不限于图像。

如果图片网址中有查询字符串等,您可以使用isRequestImage:方法轻松过滤,我只是没有,所以我不需要它。