# 問題
在 Chrome 開啟抖音網頁版時,點擊部分連結會觸發外部程式呼叫,並出現 bitbrowser://cc/ 或 xdg-open 相關訊息。
這不是單純的頁面重新導向問題,而是抖音網頁試圖開啟外部協定,並進一步觸發 xdg-open。
# 環境
- OS: EndeavourOS Linux
- Browser: Google Chrome
- Site: 抖音網頁版
# 分析
查問題的過程裡,反覆出現幾個關鍵字:
snssdk1128bytedancebitbrowser
從名稱與實際跳轉行為來看,snssdk1128、bytedance 和抖音或字節跳動系的外部協定有關;bitbrowser 則不像是抖音官方協定,比較像是第三方軟體留下來的系統關聯。這代表問題不一定是抖音直接把連結送到 bitbrowser,而是網頁觸發外部協定後,本機把請求導到了不預期的目標。
真正需要處理的不是頁面內容本身,而是外部協定的出口。只要 snssdk1128、bytedance 或 bitbrowser 這類協定仍能被 Chrome 交給系統,xdg-open 就可能持續跳出相關訊息。
這類問題背後可能同時牽涉:
- 抖音網頁自己的深層連結邏輯
- Linux 桌面環境的 URL Scheme 關聯
- 過去裝過的軟體留下來的 MIME 或處理程式設定
查問題時會一路碰到 mimeapps.list、xdg-open、Chrome 的 Preferences 與 Local State,但它們其實都在回答同一件事:外部協定最後究竟由誰接手處理。只要其中某一層保留了舊關聯,Chrome 就可能把請求送到不預期的目標。
這篇採用的主要作法,是直接阻止 Chrome 把這些協定交給系統處理。比起逐一清理零散設定,更穩定的做法是在 Chrome 端封鎖這些外部協定,例如透過 policy 的 URLBlocklist 封鎖:
snssdk1128://*bytedance://*bitbrowser://*
這樣做的效果,是讓 Chrome 在瀏覽器層就攔下請求,不再交給 xdg-open。
# 解決方法
如果主因是 xdg-open 被外部協定觸發,最直接的做法就是在 Chrome 端封鎖這些協定,不讓瀏覽器把請求送到系統。
在 Linux 上,可以建立 Chrome policy 檔案:
sudo mkdir -p /etc/opt/chrome/policies/managed
sudo tee /etc/opt/chrome/policies/managed/blocklist.json >/dev/null <<'EOF'
{
"URLBlocklist": [
"snssdk1128://*",
"bytedance://*",
"bitbrowser://*"
]
}
EOF
建立完成後,完全關閉 Chrome 再重新開啟,接著到網址列輸入:
chrome://policy
如果有成功套用,應該會看到 URLBlocklist 出現在 policy 清單中。
這個做法的重點,是讓 Chrome 在瀏覽器層直接攔下這些協定,而不是等請求送到系統後才交給 xdg-open 處理。只要協定沒有被送出去,相關訊息通常就不會再出現。
# 結論
抖音頁面只是觸發了外部協定;真正讓 xdg-open 訊息出現的,是 Chrome 與 Linux 系統關聯一起把請求送往系統層處理。
這個問題的重點,不是重新導向本身,而是外部協定處理。實際上需要關注的是三件事:
snssdk1128、bytedance這類字眼,多半和抖音或字節跳動系的外部開啟行為有關。bitbrowser不一定是抖音本身的東西,比較像是外部軟體留下來的關聯。- 最穩定的處理方式,是直接封鎖協定的外部開啟路徑,避免 Chrome 再交給
xdg-open。
遇到「網頁持續嘗試開啟外部 App」的問題時,應該優先檢查協定與系統關聯,並直接處理協定封鎖,而不是只看網頁本身。
本文使用 Codex 輔助撰寫。