xdg-openは指定されたhtmファイルを開きますが、ページ内の表示(#)位置を無視します。

xdg-openは指定されたhtmファイルを開きますが、ページ内の表示(#)位置を無視します。

Webページを開き、ページ内のidタグに移動したいbashスクリプト(openWebPage)に関数があります。

URLコンポーネントは変数に保存されます。

PIXPAGE="/home/bu5hman/pix/pixpages/media.bu5hman.2005-.video.htm"
TT="tt0078435"

関数呼び出しは変数を構成します

openWebPage "$PIXPAGE#$TT"

この関数で指定されたタグ付きファイルURLを使用してデフォルトのブラウザ(seamonkey)への呼び出しを直接ハードコーディングする場合

/home/bu5hman/Installs/seamonkey/seamonkey "file://$1"

目的のタブでページが開きますが、

xdg-open "file://$1"

上部にWebページを開きますが、ページ内のタブには移動しません。

ブラウザで直接呼び出すと、ナビゲーションバーにタグを含む完全なURLが開きますが、xgd-openを使用して呼び出すと、タグが削除されたナビゲーションバーでURLが開きます(#tt0078435)。

xdg-openがURLをアプリケーションに渡す前にURLからタグを削除するようです。

システムのデフォルトブラウザにリクエストして直接呼び出しを行うスクリプトを使用するだけでなく、xdg-openがタグを削除するのを防ぐか、代替クロスプラットフォーム呼び出しを使用してタグからWebページを開く方法はありますか?

ベストアンサー1

@Ignacio Vazquez-Abramsのヒントのおかげで解決策を見つけました。

実際、問題はxdg-openパラメータがデフォルトアプリケーションに渡される方法にあります。

基本アプリケーションが登録されている場合kde デスクトップURL(%u)を楽しみにしています

/home/bu5hman/Installs/seamonkey/seamonkey %u

渡された完全なパラメータはxdg-openURLとして使用され、ブラウザはそのタグに移動します。

%uを省略すると、渡された引数がファイルかどうかがテストされ、xdg-openURLの#から情報(スクリプトのxdg-open)が削除されます。

# If argument is a file URL, convert it to a (percent-decoded) path.
# If not, leave it as it is.
file_url_to_path()
{
    local file="$1"
    if echo "$file" | grep -q '^file:///'; then
        file=${file#file://}
        file=${file%%#*}                                #<----------
        file=$(echo "$file" | sed -r 's/\?.*$//')
        local printf=printf
        if [ -x /usr/bin/printf ]; then
            printf=/usr/bin/printf
        fi
        file=$($printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\\x\1@g')")
    fi
    echo "$file"
}

そして、ページは上部でのみ開きます。

私の場合、Firefoxは%uに登録されており、seamonkeyは登録されていないため、これら2つのブラウザで異なる動作をすることです。

おすすめ記事