在我的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视频会崩溃。
'system(“Safari URL”)'或类似的东西不起作用? – barrycarter 2010-06-03 14:19:50
不幸的是没有。我从终端试过了。 Safari启动,但将URL视为本地文件,因此无法找到它。 – Mark 2010-06-04 04:50:13
这让我亲密,但如果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