Url

創建自定義 URL 協議處理程序

  • March 30, 2021

我想為我自己的自定義 URL 協議註冊一個 URL 方案(或協議)處理程序,以便點擊具有此自定義協議的連結將在該 URL 上執行命令。我需要採取哪些步驟來添加此處理程序?

範例:我想ddg://query%20terms在新的 DuckDuckGo 瀏覽器搜尋中打開 URL。如果此協議已經存在,我假設覆蓋處理程序的步驟與創建新處理程序的步驟沒有太大區別。是的,從技術上講,這只是一個 URL 方案,而不是協議。

要向 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;

請注意,根據Desktop Entry Specification%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

#!/bin/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

引用自:https://unix.stackexchange.com/questions/497146