Как открыть / связать внешние файлы внутри плагина QuickLook, разработанного в HTML, без использования атрибута <src>?

0

После моего предыдущего вопроса кажется, что я определенно должен иметь дело с тем, что я должен использовать HTML для разработки интерактивных графических интерфейсов... но теперь проблема другая: я знаю, что по соображениям безопасности невозможно (в отличие от Xcode 4.2 с OSX 10.6.8), чтобы открывать/связывать больше файлов из внешних каталогов с помощью атрибута <src>, и мне было интересно, могут ли быть другие способы достижения этой цели.

На этой странице (пункт "Генерация обогащенного HTML") показана часть кода, которая включает файл CSS в качестве MIME-вложения: вы считаете, что можно получить тот же результат с другим типом файла (такой JS библиотека или изображение/видео/аудио)?

Вот какой код из моего проекта:

OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options)
{
    @autoreleasepool {

        if (QLPreviewRequestIsCancelled(preview)) return noErr;

        NSMutableString *html=[[NSMutableString alloc] init];
        NSDictionary *props;

        props=@{
            (__bridge NSString *)kQLPreviewPropertyTextEncodingNameKey:@"UTF-8",
            (__bridge NSString *)kQLPreviewPropertyMIMETypeKey:@"text/html",
            };

        [html appendString:@"<html>"];
        [html appendString:@"<head>"];
        [html appendString:@"<script type=\"text/javascript\" src=\"JQuery.js\">"];
        [html appendString:@"</script>"];
        [html appendString:@"<script>"];
        //...
        [html appendString:@"</script>"];
        [html appendString:@"</head>"];
        [html appendString:@"<body>"];
        //...
        [html appendString:@"</body>"];
        [html appendString:@"</html>"];

        QLPreviewRequestSetDataRepresentation(preview,(CFDataRef)[html dataUsingEncoding:NSUTF8StringEncoding],kUTTypeHTML,(CFDictionaryRef)props);
    }

    return noErr;
}

Огромное спасибо заранее!

Теги:
xcode
src
quicklook

1 ответ

2
Лучший ответ

Да, всевозможные файлы (в пределах того, как Quick Look sandboxes WebKit) могут быть подключены с использованием схемы cid: Это всего лишь способ сказать WebKit, как найти данные, соответствующие ресурсу, поэтому он может использоваться для всех видов ресурсов.

В вашем случае загрузите JQuery.js в объект NSData, напишите src=\"cid:JQuery.js\" и добавьте это в свой объект реквизита для kQLPreviewPropertyAttachmentsKey

@{
  @"JQuery.js" : @{ 
             (__bridge NSString *)kQLPreviewPropertyMIMETypeKey : @"text/javascript",
             (__bridge NSString *)kQLPreviewPropertyAttachmentDataKey: dataContainingJQuery
  },
},
  • 0
    Спасибо, Томас за ответ ... ты мне очень помог! И последнее: если я не хочу искать файл JS внутри определенной папки, что я должен записать в dataWithContentsOfFile ? Тильда до слэша, похоже, совсем не работает.
  • 0
    Сохраните файл JS в комплекте вашего генератора и используйте тот же код, что и в образце Apple: используйте +[NSBundle bundleForClass:] чтобы найти свой пакет, затем -[bundle URLForResource:withExtension:] чтобы найти JS и загрузить его с помощью +[NSData dataWithContentsOfURL:]
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню