在我的 Objective-C 程序中,无论系统的默认浏览器是什么,我都需要在 Safari 中打开一个 URL。这意味着这不起作用,因为它可以启动 Firefox 或任何其他浏览器:
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
我想我很接近这个:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
只需要弄清楚如何将URL作为参数传递......有没有更简单的方法?
谢谢!
更新:以下代码使用我想要的 URL 启动 Safari,但 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 视频而崩溃。