如何在 OS X 上配置自定义 URL 处理程序?

如何在 OS X 上配置自定义 URL 处理程序?

我在网上阅读了很多关于自定义 URL 处理程序/自定义协议处理程序的文章,例如:

我知道你可以告诉系统某个程序能够处理该Info.plist文件的某个方案/协议:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Local File</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>local</string>
        </array>
    </dict>
</array>
<key>NSUIElement</key>
<true/>

但是如果有多个应用程序能够打开相同的 URL 处理程序,例如,mailto:您如何指定希望系统使用哪一个?

有一些参考资料,比如 ,但More Internet preference pane作者的网站上似乎不再提供这些工具。我确实通过谷歌搜索在网上找到了它,但它看起来有点不稳定 - 就像它是为较旧的 OSX 编写的 - 也许是 Tiger。

我找不到有关如何为协议和自定义协议设置 URL 处理程序的信息。我假设plist某个地方有一个我可以编辑的文件 - 或者也许有一个更新、更好的实用程序可以很好地与 Mountain Lion 配合使用?

答案1

您寻找的文件是~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist

它包含一个名为的数组LSHandlers,并且定义 的 Dictionary 子项LSHandlerURLScheme可以使用 进行相应修改LSHandlerRole。您需要 [转换此二进制文件][1] 才能编辑它。

您可以使用以下方法,而不必手动编辑此文件SwiftDefaultApps。请注意,此应用程序是 RCDefaultApp 的后继者,后者已无人维护,但似乎也存在一些错误。

答案2

列出 Apple OS X 10.10 (Yosemite) 上的当前 LaunchServices URL 处理程序设置:

defaults read com.apple.LaunchServices/com.apple.launchservices.secure

答案3

2017 年 7 月更新:RCDefaultApplstool不再适用于 macOS 10.12 或更高版本。我们必须找到新的解决方案。

编辑 2018 年 3 月
我发现SwiftDefaultApps但由于我还没有使用 High Sierra,所以无法测试。


进一步回答上面的问题,如果您想在命令行上执行此操作,您可以使用该lstool命令,它是 RCDefaultApp 的核心,位于 下RCDefaultApp.prefPane/Contents/Resources/lstool

它的用法很简单:

[~]$lstool --help
Usage:

lstool read [<lsscheme> [<type>]]
lstool [-n] write <lsscheme> <type> <app>
lstool [-n] setoption <lsscheme> <type> login|ignorecreator YES|NO
lstool [-n] register {<app>}
lstool [-n] unregister {<path> | <app>}
lstool apps

-n means do not make changes
<lsscheme> is one of: internet, media, url, extension, uti, mime, ostype
<app> is the path to an application or a name to be looked up

答案4

如果有人感兴趣的话,我实际上编写了一个简化自定义 URL 协议注册的应用程序。它被称为 LinCastor(https://onflapp.github.io/blog/pages/LinCastor.html)。处理程序可以定义为 AppleScript 或 shell 脚本(可以是 perl、python 或其他)。

相关内容