我的插件必须发出谷歌请求,然后显示另一个页面的 HTML 内容。
到目前为止,我只能显示 HTML,尽管 QuickLook 应该支持网络访问!
kng 尝试获取页面(构建 .webloc 查看器),但没有成功,然后在 README 中说
现在,Lion 中的 Quicklook 完成了这个项目试图做的事情。
我有山狮并应用了类似的模式,如下所示,但仍然没有运气。网络上似乎没有人尝试通过 QuickLook 插件访问 URL;除了 Apple 提供的未记录的 WebLoc 插件。此外,QuickLook 编程指南已有4 年历史。
我试过的:
OSStatus GeneratePreviewForURL(void *thisInterface,
QLPreviewRequestRef preview,
CFURLRef url,
CFStringRef contentTypeUTI,
CFDictionaryRef options)
{
if (QLPreviewRequestIsCancelled(preview))
return noErr;
//// Fetch Web Page
NSData *data;
NSError *err;
/// Attempt 0: static HTML -- ok
//NSString *html = @"<html><body><h1>It works!</h1></body></html>";
/// Attempt 1: dataWithContentsOfURL -- ko
data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://google.com/"] options:NSDataReadingUncached error:&err];
/// Attempt 2: NSURLConnection -- ko
//NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]];
//NSURLResponse *response;
//data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&err];
// Builds /Users/pete/out.txt on error
NSString *html = [[NSString alloc] initWithData:(NSData *)data encoding:NSUTF8StringEncoding];
[err.description writeToFile:@"/Users/pete/out.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
//// Display HTML
NSMutableDictionary *props;
[props setObject:@"UTF-8" forKey:(NSString *)kQLPreviewPropertyTextEncodingNameKey];
[props setObject:@"text/html" forKey:(NSString *)kQLPreviewPropertyMIMETypeKey];
QLPreviewRequestSetDataRepresentation(preview,
(__bridge CFDataRef)[html dataUsingEncoding:NSUTF8StringEncoding],
kUTTypeHTML,
(__bridge CFDictionaryRef)props);
return noErr;
}
完整的代码和环境可以在这里找到