В моей объективной-c программе я должен открыть URL in Safari, каков браузер по умолчанию системы. Это означает, что это не будет работать, потому что это могло запустить Firefox или безотносительно другого браузера:
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
Я думаю, что я, соглашаются с этим:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
только должен выяснить, как передать в URL как параметр... Существует ли более легкий путь?
Спасибо!
Обновление: следующий код запускает Safari с URL, который я хочу, но Safari завершается сразу же! Какие-либо идеи, почему это?
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];
Я наблюдал то же поведение с LSOpenFromURLSpec
. Если экземпляр Safari работает, он хорошо работает. Если никакой экземпляр Safari не работал, это запускает новый и завершает его сразу же.
Обновление 2: Safari только отказывает для веб-сайтов, которым встроили Flash. С кодом выше, я могу открыть google.com очень хорошо, однако катастрофические отказы Safari для видео YouTube, например.
Попробуйте метод OpenURLs
из NSWorkspace
:
- (BOOL) openURLs:(NSArray *)urls
withAppBundleIdentifier:(NSString *)bundleIdentifier
options:(NSWorkspaceLaunchOptions)options
additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
launchIdentifiers:(NSArray **)identifiers
Два перечисленных выше варианта действительно работают для веб-сайтов, на которых нет Flash-роликов.
Описанный мною сбой кажется ошибкой, которую можно воспроизвести даже с помощью одного Applescript. Я открыл для этого отдельный вопрос ( AppleScript для открытия URL-адреса в Safari вылетает для веб-сайтов на основе Flash )
Для записи, ответ на мой вопрос - использовать LSOpenFromURLSpec
или этот код:
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];