Откройте URL с помощью Safari независимо от того, какой браузер установлен - PullRequest
10 голосов
/ 03 июня 2010

В моей программе 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 ]

5 голосов
/ 03 июня 2010

Попробуйте метод OpenURLs из NSWorkspace:

- (BOOL) openURLs:(NSArray *)urls
         withAppBundleIdentifier:(NSString *)bundleIdentifier
         options:(NSWorkspaceLaunchOptions)options
         additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
         launchIdentifiers:(NSArray **)identifiers
4 голосов
/ 20 августа 2011

Используйте это, чтобы открыть URL в браузере по умолчанию ...

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com/"];
if( ![[NSWorkspace sharedWorkspace] openURL:url] )
    NSLog(@"Failed to open url: %@",[url description]);
2 голосов
/ 11 июля 2015

Вам не нужен фреймворк AppKit. Просто реализуй это.

NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];    

[[UIApplication sharedApplication] openURL:url];
2 голосов
/ 04 июня 2010

Два параметра, которые я перечислил выше, на самом деле работают для веб-сайтов, которые не включают Flash-фильмы.

Описанный мной сбой, похоже, является ошибкой, которую можно воспроизвести даже с помощью одного Applescript. Я открыл отдельный вопрос для этого ( AppleScript, чтобы открыть URL в сбоях Safari для веб-сайтов на базе Flash )

Для справки, ответ на мой вопрос должен использовать LSOpenFromURLSpec или этот код:

NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari" 
  options: NSWorkspaceLaunchDefault
  additionalEventParamDescriptor: NULL
  launchIdentifiers: NULL];
...