【问题标题】:How to open a url in safari even if my default browser is not Safari using Swift in macOS?即使我的默认浏览器不是在 macOS 中使用 Swift 的 Safari,如何在 Safari 中打开 url?
【发布时间】:2022-03-09 09:55:07
【问题描述】:

即使我的默认浏览器设置为 Google Chrome,我仍试图在 Safari 中打开一个网址。我怎么做?我正在使用以下代码,但它仅在默认浏览器中打开 url。

let requiredURL = URL(string: "https://www.google.com)")!
NSWorkspace.shared.open(requiredURL)

我是否必须使用以下功能:

NSWorkspace.shared.open(urls: [URL], withApplicationAt: URL, options: NSWorkspace.LaunchOptions, configuration: [NSWorkspace.LaunchConfigurationKey : Any])

如果是,我该如何实现?

【问题讨论】:

  • 我发现你正在寻找的不是最好的方法,但它会帮助你stackoverflow.com/a/57496854/10585521
  • shell 进程可以工作,只是它只打开主机 url。例如,如果我尝试在 google 上搜索某些内容,则 url 应该会打开搜索结果。但是,使用这种方法,它只能打开 www.google.com。不是谷歌内的搜索。
  • 你要打开的链接是什么?您是否有可能提供错误的网址?

标签: swift macos safari


【解决方案1】:

您可以使用 macOS 11 中已弃用的 NSWorkspace open method

let url = URL(string: "https://www.google.com")!

NSWorkspace.shared.open([url], withAppBundleIdentifier: "com.apple.safari", options: .default, additionalEventParamDescriptor: nil, launchIdentifiers: nil)

或替换method(macOS 10.15 或更高版本)

do {
    let safariURL = try FileManager.default.url(for: .applicationDirectory, in: .localDomainMask, appropriateFor: nil, create: false).appendingPathComponent("Safari.app")
    NSWorkspace.shared.open([url], withApplicationAt: safariURL, configuration: .init()) { (runningApp, error) in
        print("running app", runningApp ?? "nil")
    }
} catch {
    print(error)
}
   

【讨论】:

  • 这个解决方案工作正常,只是它有时会在新选项卡中打开链接,有时会完全在新窗口中打开。有没有办法只在新标签中打开?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2017-11-26
  • 2012-10-22
  • 2020-05-06
  • 1970-01-01
  • 2014-12-06
相关资源
最近更新 更多