在 Chrome 浏览器内部使用外部应用程序打开地址

在 Chrome 浏览器内部使用外部应用程序打开地址

在此处输入图片描述

Chrome 浏览器放弃基于 NPAPI 的扩展(包括用于此目的的插件,类似于 Firefox 的 Openwith 和 Flashgot)后,是否有办法将链接从浏览器发送到外部应用程序(如其他浏览器、视频播放器、自定义下载器等)?

这个 NPAPI 插件就是这么叫的:“用外部应用程序打开”。

考虑到发生的变化,还有其他选择吗?

答案1

除了通过专用扩展之外,无法再直接在 Chrome 上调用外部应用程序,但我找不到不使用 NPAPI 的扩展。

还有一种方法可以工作,需要在操作系统中设置:自定义协议,也称为自定义 URI 方案。

URI 方案是 URL 开头的部分。一些常见的方案包括:http(s)://ftp://feed://mailto:news:。所有已知方案的列表可在 IANA 列表中找到 统一资源标识符 (URI) 方案

这些协议所做的只是启动处理参数的应用程序。一旦应用程序成功启动,它就可以使用命令行参数来检索启动它的 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."

答案2

不幸的是,Chrome 无法控制在输入某些 URL 或协议时启动哪个程序。除非您选择的程序能够添加新协议并与其关联,否则这由 Windows 决定。

例如,如果您安装了 utorrent 并保留其默认设置,则单击此链接时它将自动打开:磁铁:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn确实,在 Firefox 上你会被提示选择你喜欢的程序,但 Chrome 却不会这样做。

相关内容