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


64

我在网上阅读了很多有关自定义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似乎在作者的站点上不再可用。我确实是在Google网上通过Googling找到它的,但似乎有点不稳定-就像是为较旧的OSX编写的-也许是Tiger。

我还没有找到有关如何为协议和自定义协议设置URL处理程序的信息。我假设plist我可以在某个地方编辑文件-也许有一个更新更好的工具可以与Mountain Lion一起使用?

Answers:


55

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

它包含一个称为的数组LSHandlers,并且LSHandlerURLScheme可以使用相应地修改定义an的Dictionary子级LSHandlerRole

除了手动编辑此文件,您还可以使用RCDefaultApp,它为您提供了一个不错的“首选项窗格”。据说不适用于macOS 10.12及更高版本,但我可以确认它在macOS 10.14下运行。

另一种选择是SwiftDefaultApps

例如,这是SVN和SSH:

…以及在RCDefaultApp中:


35
4分19秒?认真吗
丹尼尔·贝克

2
感谢您提供快速详细的答案。看起来不错!但是,问题是-我认为我以前尝试过RCDefaultApp并遇到了一些问题。它为您无缝地工作了吗?
cwd

@cwd老实说,我不经常使用它。超级用户的屏幕截图比其他任何功能都多:)每当我需要更改文件关联时,都可以通过Finder中的“ 获取信息...”对话框进行操作。我从不需要更改协议和MIME处理程序。但这对我来说似乎足够稳定。
slhck

这似乎是要打开一个真正的“应用程序”。如果我想使用终端命令等进行一些自定义处理,该怎么办?
纽特

1
@nute不确定,只是从我的头顶开始。也许是用Automator创建的包含外壳脚本的应用程序?
slhck

14

2017年7月更新:RCDefaultApp lstool不再在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

2
我在github.com/Lord-Kamina/SwiftDefaultApps上找到了RCDefaultApp的可能替代品,尽管您必须使用Xcode自己构建它。
luckman212'9

我使用的是RCDefaultApp的2.1版本,它对10.12来说效果很好。至少仍然列出所有项目。还是仅某些特定操作不再起作用?请详细说明
-SuperTempel

@SuperTempel的lstool命令行工具显示此错误,当您尝试运行它:objc[1049]: Objective-C garbage collection is no longer supported.lstool由RCDefaultApp偏好窗格中使用的内部程序虽然偏好设置面板似乎工作,我不认为它可以做任何事情,因为,lstool坏了。 )
Quinn Comendant

SwiftDefaultApps 显然不适用于Intel处理器。在至少2018
。– Quinn Comendant

3
我是SwiftDefaultApps的开发人员,SWDA从一开始就使用macOS Sierra进行编码,并且考虑到更高的要求(事实上,在阅读了此问题和类似问题之后,我开始对此进行研究)。由于Swift或macOS本身存在错误,因此无法在10.13中运行,但似乎已通过对10.13.4 / Swift 4.1的更新进行了修复。
Gregorio Litenstein

11

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

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

是的,使用了不会损坏或需要您下载内容的内置工具。
xdhmoore

但是,这并未列出所有协议的所有默认值,仅列出了一些。
Vadim Peretokin

5

实际上,如果有人感兴趣,我实际上编写了一个简化自定义URL协议注册的应用程序。它称为LinCastor(http://onflapp.wordpress.com/lincastor/)。可以将处理程序定义为AppleScript或Shell脚本(可以是perl,python或任何其他版本)。


这个主意很好,但恐怕我无法使提供的示例脚本正常工作。更多关于你的博客,等待审核:getitdoneapps.wordpress.com/lincastor-browser/support/...
闪光谢里登

在示例文件中,这似乎有些令人费解的换行怪异现象,可通过从命令行运行脚本来诊断。(“ / bin / sh:错误的解释器:不允许进行操作”)在BBEdit中保存副本,以及更改与Windows之间的换行符并为其重新充电,可以解决此问题。
Flash Sheridan

5

使用XCode打开文件非常容易。

使用https://discussions.apple.com/thread/5815759plutil的答案中所述的内置命令来在xml1或binary1格式之间转换。

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

无需“外星人”工具:-)


4

您也可以使用duti

echo $'com.apple.mail mailto\ncom.googlecode.iterm2 x-man-page'>~/.duti;duti ~/.duti

0

我只是在El Capitan的带领下尝试了旧的More Internet。

它很时髦,唯一起作用的方法是使用向上和向下箭头键选择协议,然后将APP图标拖放到窗口中进行更改。

我将默认设置从Safari切换到了Chrome,并且更改卡住了,因此仍然可以正常使用。


这是什么?您的答案不清楚。
lacostenycoder

0

在Apple OS X 10.10+(Yosemite)上使用Xcode列出当前LaunchServices URL处理程序设置的另一种方法:

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.