Chrome 浏览器放弃基于 NPAPI 的扩展(包括用于此目的的插件,类似于 Firefox 的 Openwith 和 Flashgot)后,是否有办法将链接从浏览器发送到外部应用程序(如其他浏览器、视频播放器、自定义下载器等)?
这个 NPAPI 插件就是这么叫的:“用外部应用程序打开”。
考虑到发生的变化,还有其他选择吗?
答案1
除了通过专用扩展之外,无法再直接在 Chrome 上调用外部应用程序,但我找不到不使用 NPAPI 的扩展。
还有一种方法可以工作,需要在操作系统中设置:自定义协议,也称为自定义 URI 方案。
URI 方案是 URL 开头的部分。一些常见的方案包括:http(s)://
、ftp://
、feed://
、mailto:
、news:
。所有已知方案的列表可在 IANA 列表中找到
统一资源标识符 (URI) 方案。
这些协议所做的只是启动处理参数的应用程序。一旦应用程序成功启动,它就可以使用命令行参数来检索启动它的 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."
答案2
不幸的是,Chrome 无法控制在输入某些 URL 或协议时启动哪个程序。除非您选择的程序能够添加新协议并与其关联,否则这由 Windows 决定。
例如,如果您安装了 utorrent 并保留其默认设置,则单击此链接时它将自动打开:磁铁:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn确实,在 Firefox 上你会被提示选择你喜欢的程序,但 Chrome 却不会这样做。