safari - 无论系统浏览器设置为什么,都可以使用 Safari 打开 URL

标签 safari nsworkspace launch-services

在我的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 视频而崩溃,例如。

最佳答案

试试 OpenURLs方法来自 NSWorkspace :

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

关于safari - 无论系统浏览器设置为什么,都可以使用 Safari 打开 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2965615/

相关文章:

xcode - 通过 Finder/open 启动 Mac OS X 应用程序和直接执行应用程序二进制文件有什么区别?

macos - 在 2016 年,如何获取文件的 Finder “Kind”?

macos - 允许基于文档的应用程序中“打开”面板中的任何类型

macos - OS X 上事件文档更改的通知?

macos - NSRunningApplication,返回最近使用的应用程序列表?

cocoa - 在 Finder 中显示在 10.8 中不起作用

html - Safari/Chrome flex-parent 100% height + padding 和 100% height child

javascript - TinyMCE:焦点更改后无法在 Mac 上写入特殊字符

html - Safari 中的缩放问题 - 为什么 Border-top 会修复它,还有其他方法吗?

javascript - 在 Safari 中同时使用 writing-mode 和 text-overflow 时的兼容性