Откройте 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];
Другие вопросы по тегам