Больше нельзя напрямую вызывать в Chrome внешнее приложение, кроме как через выделенное расширение, но я не смог найти то, которое не использует NPAPI.
Есть еще один метод, который должен работать, который должен быть установлен в операционной системе: пользовательские протоколы, называемые также пользовательскими схемами URI.
Схема URI - это часть, которую можно найти в начале URL-адреса. Некоторые распространенные из них являются: http(s)://
, ftp://
, feed://
, mailto:
, news:
. Список всех известных можно найти в списке схем универсального идентификатора ресурса (URI) IANA
.
Все, что делают эти протоколы, это запускает приложение, которое обрабатывает параметр. После успешного запуска приложения оно может использовать параметры командной строки для получения URI, который его запустил. Обычный метод - вызвать известный скрипт, который обрабатывает его аргумент и запускает требуемую программу.
Включая здесь учебник для Windows, Linux и Mac слишком тяжело, но вот несколько полезных ссылок:
Чтобы ответить на запрос автора, ниже приведен сценарий 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."