web-dev-qa-db-ja.com

カスタムURLプロトコルハンドラーを作成する

独自のカスタムURLプロトコルのURLスキーム(またはプロトコル)ハンドラーを登録したいので、このカスタムプロトコルのリンクをクリックすると、そのURLでコマンドが実行されます。このハンドラーを追加するには、どの手順を実行する必要がありますか?

例:ddg://query%20termsなどのURLを新しいDuckDuckGoブラウザー検索で開きたい。このプロトコルがすでに存在する場合、ハンドラーをオーバーライドする手順は、新しいプロトコルを作成する手順とほとんど変わらないと思います。はい、技術的には、これは単なるURLスキームであり、プロトコルではありません。

7
palswim

新しいURLスキームハンドラーをXDGに登録するには、最初に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
10
palswim