Больше нельзя напрямую вызывать в Chrome внешнее приложение, кроме как через выделенное расширение, но я не смог найти то, которое не использует NPAPI.
Есть еще один метод, который должен работать, который должен быть установлен в операционной системе: пользовательские протоколы, называемые также пользовательскими схемами URI.
Схема URI - это часть, которую можно найти в начале URL-адреса. Некоторые распространенные из них являются: http(s)://
, ftp://
, feed://
, mailto:
, news:
. Список всех известных можно найти в списке схем универсального идентификатора ресурса (URI) IANA .
Все, что делают эти протоколы, это запускает приложение, которое обрабатывает параметр. После успешного запуска приложения оно может использовать параметры командной строки для получения URI, который его запустил. Обычный метод - вызвать известный скрипт, который обрабатывает его аргумент и запускает требуемую программу.
Включение здесь учебника для Windows, Linux и Mac слишком тяжело, но вот несколько полезных ссылок:
- Регистрация приложения в схеме URI - для Windows
- Как запускать внешние приложения с использованием пользовательских протоколов - для Windows и Linux
- Запуск внешних приложений с использованием пользовательских протоколов под OSX
Чтобы ответить на запрос автора, ниже приведен сценарий Linux KDE, который устанавливает /path/prog
обработчик для протокола xyz://
. Он создает для KDE файл $KDEDIR/share/services/xyz.protocol
и заполняет его. Настройки Gnome также устанавливаются (если это возможно), так как некоторые приложения все еще используют их, даже если работают в KDE. Скрипт адаптирован из github .
#!/usr/bin/env bash # # This script attempts to register a protocol handler for # links that look like sgaction://blah. # # It should be sufficient for gnome apps like pidgin and kde apps # like konqueror. Firefox seems to pay attention to the gnome # settings at least to the degree that it recognizes links of the # form $protocol://blah as hot-links, but it may still ask you to # select the application the first time you click on one. protocol=xyz handler="/path/prog" echo "Installing $protocol protocol handler for Gnome." gconfTool="$(which gconftool-2)" if [[ "$gconfTool" ]]; then gconftool-2 --set --type=string /desktop/gnome/url-handlers/$protocol/command "$handler \"%s\"" gconftool-2 --set --type=bool /desktop/gnome/url-handlers/$protocol/enabled true gconftool-2 --set --type=bool /desktop/gnome/url-handlers/$protocol/need-terminal false else echo "WARNING: gconftool-2 not found: skipping gnome url-handler registration." fi echo "Installing $protocol protocol handler for KDE." kdeProtoDir=~/.kde/share/services if [[ "$KDEDIR" ]]; then kdeProtoDir="$KDEDIR/share/services" fi if [[ ! -e "$kdeProtoDir" ]]; then mkdir -p "$kdeProtoDir" fi if [[ -e "$kdeProtoDir" ]]; then kdeProtoFile="$kdeProtoDir/$protocol.protocol" rm -f $kdeProtoFile cat > $kdeProtoFile << EOF [Protocol] exec=$handler "%u" protocol=$protocol input=none output=none helper=true listing=false reading=false writing=false makedir=false deleting=false EOF else echo "WARNING: can't find or create KDE protocol directory: $kdeProtoDir: skipping KDE url-handler registration." fi echo "Done."