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-open
URLとして使用され、ブラウザはそのタグに移動します。
%uを省略すると、渡された引数がファイルかどうかがテストされ、xdg-open
URLの#から情報(スクリプトの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つのブラウザで異なる動作をすることです。