创建自定义 URL 协议处理程序

创建自定义 URL 协议处理程序

我想为我自己的自定义 URL 协议注册一个 URL 方案(或协议)处理程序,以便单击具有此自定义协议的链接将在该 URL 上执行命令。我需要采取哪些步骤来添加此处理程序?

示例:我想像ddg://query%20terms在新的 DuckDuckGo 浏览器搜索中一样打开 URL。如果此协议已经存在,我认为重写处理程序的步骤与创建新处理程序的步骤没有太大区别。是的,从技术上讲,这只是一个 URL 方案,而不是一个协议。

答案1

要向 XDG 注册新的 URL 方案处理程序,首先创建一个指定x-scheme-handler/...MIME 类型的桌面条目:

[Desktop Entry]
Type=Application
Name=DDG Scheme Handler
Exec=open-ddg.sh %u
StartupNotify=false
MimeType=x-scheme-handler/ddg;

请注意,%u将 URL(例如ddg://query%20terms)作为单个参数传递,根据桌面输入规范

一旦您创建了此桌面条目并安装了它(即将其放入applicationsXDG 的本地或系统目录中,例如~/.local/share/applications//usr/share/applications/),那么您必须使用 MIME 类型注册该应用程序(假设您已将您的桌面条目命名为ddg-opener.desktop):

xdg-mime default ddg-opener.desktop x-scheme-handler/ddg

处理程序的参考实现ddg-open.sh

#!/usr/bin/env bash

# bash and not just sh because we are using some bash-specific syntax

if [[ "$1" == "ddg:"* ]]; then
    ref=${1#ddg://}
    #ref=$(python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])" "$ref") # If you want decoding
    xdg-open "https://duckduckgo.com/?q=$ref"
else
    xdg-open "$1" # Just open with the default handler
fi

答案2

如果你有mimeo已安装,并且您已经知道要为其创建关联的应用程序的桌面文件的名称,这就像执行以下操作一样简单:

mimeo --add 'x-scheme-handler/ddg' <path or name of desktop file>

例如,如果 duckduckgo,桌面文件位于/usr/share/applications/Duckduckgo.desktop,那么您只需要:

mimeo --add 'x-scheme-handler/ddg' Duckduckgo

或者

mimeo --add 'x-scheme-handler/ddg' /usr/share/applications/Duckduckgo.desktop

相关内容