0

我的插件必须发出谷歌请求,然后显示另一个页面的 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;
}

完整的代码和环境可以在这里找到

4

1 回答 1

0

出于安全原因,不允许 Quick Look 插件进行任何网络请求。事实上,您的插件是沙盒的,只应允许访问您尝试预览的文件(当然,除了您的插件需要的框架之外)。

于 2013-07-16T06:49:05.257 回答