
Я много читал в Интернете о пользовательских обработчиках URL-адресов / пользовательских обработчиках протоколов, таких как:
- Запуск внешних приложений с использованием пользовательских протоколов в OSX
- Обработчик URL-адресов OS X для открытия ссылок на локальные файлы
Я понимаю, что можно сообщить системе, что конкретная программа способна обрабатывать определенную схему/протокол с файлом 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, но он кажется немного шатким - как будто он был написан для старой 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
Список текущих настроек обработчика URL-адресов LaunchServices в Apple OS X 10.10 (Yosemite):
defaults read com.apple.LaunchServices/com.apple.launchservices.secure
решение3
Обновление июля 2017: RCDefaultApp и lstool
больше не работают на macOS 10.12 или более поздних версиях. Придется искать новое решение.
Редактировать март 2018 г.
я нашел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 или скрипт оболочки (который может быть Perl, Python или чем-то еще).