W moim programie celu-c muszę otworzyć URL w Safari bez względu na to, jaka jest domyślna przeglądarka systemu. Oznacza to, że to nie będzie działać, ponieważ mogłoby to uruchomić Firefoksa lub cokolwiek innego przeglądarkę:Otwórz URL w Safari bez względu na to, jaka przeglądarka systemu jest ustawiona na
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
myślę, że jestem blisko z tym:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
wystarczy, aby dowiedzieć się, jak przekazać w adresie URL jako parametrze ... Czy istnieje łatwiejszy sposób?
Dzięki!
Aktualizacja: Poniższy kod uruchamia Safari z żądanym adresem URL, ale Safari kończy działanie natychmiast! Jakieś pomysły, dlaczego tak jest?
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];
Podobne zachowanie zaobserwowałem z LSOpenFromURLSpec
. Jeśli działa instancja Safari, działa poprawnie. Jeśli żadna instancja Safari nie jest uruchomiona, uruchamia nową i kończy ją natychmiast.
Aktualizacja 2: Safari zawiesza się tylko w witrynach internetowych z wbudowanym Flash. Dzięki powyższemu kodowi mogę otworzyć stronę google.com, ale Safari zawiesza się na przykład w filmie na YouTube.
"System (" Safari URL ")" lub coś podobnego nie działa? – barrycarter
Niestety nie. Próbowałem tego z Terminalu. Safari uruchamia się, ale traktuje URL jako plik lokalny i dlatego nie może go znaleźć. – Mark
To mnie zbliżyło, ale jeśli Safari jeszcze nie działa, to otwiera się i kończy natychmiast. Nie zgłoszono żadnego błędu: NSString * safariFullPath = [[NSWorkspace sharedWorkspace] fullPathForApplication: @ "Safari"]; NSArray * urls = [NSArray arrayWithObject: url]; LSLaunchURLSpec urlSpec; urlSpec.appURL = (CFURLRef) [NSURL URLWithString: safariFullPath]; urlSpec.itemURLs = (CFArrayRef) adresy URL; urlSpec.passThruParams = NULL; urlSpec.launchFlags = kLSLaunchAsync; urlSpec.asyncRefCon = NULL; Status OSStatus = LSOpenFromURLSpec (& urlSpec, NULL); – Mark