Url
創建自定義 URL 協議處理程序
我想為我自己的自定義 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
)作為單個參數傳遞。一旦你創建了這個桌麵條目並安裝了它(即把它放在
applications
XDG 的本地或系統目錄中,比如~/.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