После моего предыдущего вопроса кажется, что я определенно должен иметь дело с тем, что я должен использовать 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;
}
Огромное спасибо заранее!
Да, всевозможные файлы (в пределах того, как 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
},
},
dataWithContentsOfFile
? Тильда до слэша, похоже, совсем не работает.+[NSBundle bundleForClass:]
чтобы найти свой пакет, затем-[bundle URLForResource:withExtension:]
чтобы найти JS и загрузить его с помощью+[NSData dataWithContentsOfURL:]