Launch Safari (not default browser) at URL in Swift?

大憨熊 提交于 2021-02-05 11:52:36

问题


I need to open Safari specifically, not the default browser. If Chrome/Firefox/whatever is the default browser my app still needs to open the URL in Safari.

I've looked online but all I can see is for opening in default browser like this...

let url = URL(string: host)!
NSWorkspace.shared.open(url)

...which works for me only when Safari is the users default.

How can I open a URL in Safari specifically?

Not duplicate - the other question is not in Swift...


回答1:


Okay I found a solution but it's a bit of a hack...

Shell function for making bash commands:

 func shell(command: String) -> String {
    var output = ""
    var error = ""

    do {
        let task = Process()

        task.launchPath = "/bin/bash"

        task.arguments = ["-c", command]

        let outputPipe = Pipe()
        task.standardOutput = outputPipe
        let errorPipe = Pipe()
        task.standardError = errorPipe

        try task.run()
        let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile()
        output = NSString(data: outputData, encoding: String.Encoding.utf8.rawValue)! as String
        let errorData = errorPipe.fileHandleForReading.readDataToEndOfFile()
        error = NSString(data: errorData, encoding: String.Encoding.utf8.rawValue)! as String
    }
    catch let err as NSError{
        output = err.localizedDescription
    }
    return error + "\n" + output + "\n"
}

In bash you can use: open -a safari www.blahblahblah.com

So in Swift I can implement this like so:

shell(command: "open -a safari " + host)

Bit of a hack but it works



来源:https://stackoverflow.com/questions/57495315/launch-safari-not-default-browser-at-url-in-swift

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!