Shell-Script

xdg-open 打開指定的 htm 文件但忽略頁面內的標記 (#) 位置

  • January 1, 2018

我在 bash 腳本 (openWebPage) 中有一個函式,我想打開一個網頁並導航到頁面內的 id 標記。

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"

打開頂部的網頁,但不導航到頁面內的標籤。

當直接呼叫瀏覽器時,它會在導航欄中打開完整的 url 和標籤,但是當使用 xgd-open 呼叫時,它會在導航欄中去掉標籤 (#tt0078435) 的 url 打開。

似乎 xdg-open 在將標籤傳遞給應用程序之前從 url 中剝離了標籤。

除了使用腳本為預設瀏覽器詢問系統並編寫直接呼叫之外,有沒有辦法阻止 xdg-open 剝離標籤或替代跨平台呼叫以在標籤處打開網頁?

感謝@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 沒有,這就是為什麼我在兩個瀏覽器中有不同的行為。

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