En mi programa objetivo-c, necesito abrir una URL en Safari sin importar cuál sea el navegador predeterminado del sistema. Eso significa que esto no va a funcionar, porque podría lanzar Firefox o cualquier otro navegador:Abrir URL con Safari independientemente del navegador del sistema que esté configurado en
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
creo que estoy cerca con esto:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
sólo tiene que encontrar la manera de pasar en la URL como parámetro ... ¿Hay una manera más fácil?
Gracias!
Actualización: El siguiente código inicia Safari con la URL que deseo, ¡pero Safari termina de inmediato! ¿Alguna idea de por qué es esto?
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];
me observó el mismo comportamiento con LSOpenFromURLSpec
. Si se está ejecutando una instancia de Safari, funciona bien. Si no se estaba ejecutando ninguna instancia de Safari, inicia una nueva y la finaliza de inmediato.
Actualización 2: Safari solo se bloquea para sitios web que tienen Flash incrustado. Con el código anterior, puedo abrir google.com muy bien, sin embargo, Safari falla para un video de YouTube, por ejemplo.
'system ("Safari URL")' o algo similar no funciona? – barrycarter
Desafortunadamente no. Intenté esto desde la Terminal. Safari se inicia pero trata la URL como un archivo local y, por lo tanto, no puede encontrarla. – Mark
Esto me acercó, pero si Safari no se está ejecutando, se abre y finaliza de inmediato. No se ha informado de ningún error: NSString * safariFullPath = [[NSWorkspace sharedWorkspace] fullPathForApplication: @ "Safari"]; NSArray * urls = [NSArray arrayWithObject: url]; LSLaunchURLSpec urlSpec; urlSpec.appURL = (CFURLRef) [NSURL URLWithString: safariFullPath]; urlSpec.itemURLs = (CFArrayRef) urls; urlSpec.passThruParams = NULL; urlSpec.launchFlags = kLSLaunchAsync; urlSpec.asyncRefCon = NULL; OSStatus status = LSOpenFromURLSpec (& urlSpec, NULL); – Mark