Откройте URL с помощью Safari независимо от того, какой браузер системы установлен
В моей программе target-c мне нужно открыть URL в 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.
4 ответа
Попробуйте OpenURLs
метод из NSWorkspace
:
- (BOOL) openURLs:(NSArray *)urls
withAppBundleIdentifier:(NSString *)bundleIdentifier
options:(NSWorkspaceLaunchOptions)options
additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
launchIdentifiers:(NSArray **)identifiers
Используйте это, чтобы открыть URL в браузере по умолчанию...
NSURL *url = [NSURL URLWithString:@"http://www.stackru.com/"];
if( ![[NSWorkspace sharedWorkspace] openURL:url] )
NSLog(@"Failed to open url: %@",[url description]);
Вам не нужен фреймворк AppKit. Просто реализуй это.
NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];
[[UIApplication sharedApplication] openURL:url];
Два варианта, которые я перечислил выше, на самом деле работают для сайтов, которые не включают Flash-фильмы
Описанный мной сбой, похоже, является ошибкой, которую можно воспроизвести даже с помощью одного Applescript. Я открыл отдельный вопрос для этого ( AppleScript, чтобы открыть URL в сбоях Safari для сайтов на основе Flash)
Для записи, ответ на мой вопрос заключается в использовании LSOpenFromURLSpec
или этот код:
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];