2010-06-03 89 views
10

在我的objective-c程序中,无论系统的默认浏览器是什么,我都需要在Safari中打开URL。这意味着,这是行不通的,因为它可以启动Firefox或任何其他浏览器:使用Safari打开URL无论系统浏览器设置为什么

NSWorkspace * ws = [NSWorkspace sharedWorkspace]; 
[ws openURL: url]; 

我想我接近这一点:

[ws launchAppWithBundleIdentifier: @"com.apple.Safari" 
          options: NSWorkspaceLaunchWithoutActivation 
    additionalEventParamDescriptor: NULL 
       launchIdentifier: nil]; 

只需要弄清楚如何通过在URL中作为参数...有没有更简单的方法?

谢谢!

更新:以下代码将启动Safari并提供我想要的网址,但Safari会马上终止!任何想法,为什么这是?

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

我观察到与LSOpenFromURLSpec相同的行为。如果一个Safari实例正在运行,它可以正常工作。如果没有Safari实例正在运行,它将启动一个新实例并立即终止。

更新2:对于嵌入了Flash的网站,Safari只会崩溃。使用上面的代码,我可以打开google.com,但是Safari浏览器会崩溃,例如,YouTube视频会崩溃。

+0

'system(“Safari URL”)'或类似的东西不起作用? – barrycarter 2010-06-03 14:19:50

+0

不幸的是没有。我从终端试过了。 Safari启动,但将URL视为本地文件,因此无法找到它。 – Mark 2010-06-04 04:50:13

+0

这让我亲密,但如果Safari尚未运行,它会立即打开并终止。没有错误报告: NSString * safariFullPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:@“Safari”]; NSArray * urls = [NSArray arrayWithObject:url]; LSLaunchURLSpec urlSpec; urlSpec.appURL =(CFURLRef)[NSURL URLWithString:safariFullPath]; urlSpec.itemURLs =(CFArrayRef)网址; urlSpec.passThruParams = NULL; urlSpec.launchFlags = kLSLaunchAsync; urlSpec。asyncRefCon = NULL; OSStatus status = LSOpenFromURLSpec(&urlSpec,NULL); – Mark 2010-06-04 05:26:56

回答

5

NSWorkspace尝试OpenURLs方法:

- (BOOL) openURLs:(NSArray *)urls 
     withAppBundleIdentifier:(NSString *)bundleIdentifier 
     options:(NSWorkspaceLaunchOptions)options 
     additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor 
     launchIdentifiers:(NSArray **)identifiers 
2

我上面列出的两个方案实际上是不包含Flash影片的网站工作。

我描述的崩溃似乎是一个错误,甚至可以用一个单独的Applescript重现。我打开一个单独的问题,这个(AppleScript to open URL in Safari crashes for Flash-based websites

为了记录在案,回答我的问题是,要么使用LSOpenFromURLSpec或验证码:

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

海马克,如果这现在解决了你的问题。你可能想标记你的(或另一个)作为你的问题的答案。如果遇到崩溃,我认为这会是另一个问题。 – Besi 2015-03-25 10:44:15

4

使用此在默认浏览器中打开URL。 ..

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com/"]; 
if(![[NSWorkspace sharedWorkspace] openURL:url]) 
    NSLog(@"Failed to open url: %@",[url description]); 
+2

虽然这会打开一个URL,但我认为它并没有真正回答这个问题。 – Besi 2015-03-25 10:39:17

2

您不需要AppKit框架。只需实现这一点。

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

[[UIApplication sharedApplication] openURL:url]; 
相关问题