Как вызвать приложение с параметрами в NPAPI для Mac
Я пытаюсь создать простой NPAPI, который передает URL в Safari.
Метод plugin_invoke находится ниже:
bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) {
// Make sure the method called is "open".
NPUTF8 *name = npnfuncs->utf8fromidentifier(methodName);
if(strcmp(name, plugin_method_name_open) == 0) {
npnfuncs->memfree(name);
BOOLEAN_TO_NPVARIANT(false, *result);
// Meke sure the arugment has at least one String parameter.
if(argCount > 0 && NPVARIANT_IS_STRING(args[0])) {
// Build CFURL object from the arugment.
NPString str = NPVARIANT_TO_STRING(args[0]);
CFURLRef url = CFURLCreateWithBytes(NULL, (const UInt8 *)str.UTF8Characters, str.UTF8Length, kCFStringEncodingUTF8, NULL);
if(url) {
// Open URL with the default application by Launch Service.
//OSStatus res = LSOpenCFURLRef(url, NULL);
//CFRelease(url);
OSStatus resultt = eventNotHandledErr;
//FSRef appRef;
FSRef appRef = {0};
Boolean isDir =true;
resultt = FSPathMakeRef((UInt8 *) "/Applications/Safari.app", &appRef,
&isDir);
LSApplicationParameters appParams = {0, kLSLaunchDefaults};
appParams.application = &appRef;
appParams.version = 0;
appParams.flags = kLSLaunchDefaults;
resultt = LSOpenApplication(&appParams, NULL);
BOOLEAN_TO_NPVARIANT(resultt == noErr, *result);
}
}
return true;
}
npnfuncs->memfree(name);
return false;
}
В настоящее время он просто вызывает Safari, но URL не может быть передан.
Как я могу передать пример URL в Safari в NPAPI? Я прочитал, что LSOpenFromURLSpec может работать, но я не смог создать код.
1 ответ
Прочитайте документацию по Launch Services, особенно LSOpenURLsWithRole.
К вашему сведению, ничего по вашему вопросу не относится к NPAPI, это просто запуск приложения Mac из другого процесса. В общем, вы получите больше ответов, если не будете публиковать общие вопросы как вопросы NPAPI, поскольку больше людей знают ответы на общие вопросы Mac, чем на вопросы, относящиеся к NPAPI.