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