抖音网页 xdg-open 弹窗问题排查与修复文档
问题描述
在 Edge / Chrome 浏览器中访问抖音网页(https://www.douyin.com)时, 页面 JavaScript 会触发外部自定义协议,导致系统弹出 "xdg-open" 或 "是否打开 BitBrowser Blackhole" 对话框。
这不是浏览器 bug,而是字节跳动网页尝试唤起本地 App 的正常行为, 但因 Linux 系统上不存在对应客户端,最终 fallback 到 xdg-open, 弹出用户选择应用对话框。
根因分析
触发的协议
| 协议 | 来源 | 说明 |
|---|---|---|
bitbrowser:// | 比特浏览器残留 | 用户之前安装"比特浏览器"留下的自定义协议注册 |
snssdk1128:// | 字节跳动 | 抖音 SDK 的自定义协议 |
bytedance:// | 字节跳动 | 字节系通用协议 |
aweme:// | 字节跳动 | 抖音国际版协议 |
opencat:// | 未知第三方 | 可能是其他浏览器残留 |
触发链
抖音页面 JS
→ 尝试 window.location = 'bitbrowser://cc/xxx'
→ 系统无对应应用处理
→ fallback 到 xdg-open
→ KDE 弹窗询问用户选择应用修复方案
修复分三层,层层递进:
第一层:清除浏览器内的协议绑定记录
Edge Preferences 文件中记录了网站对协议的绑定,需要清除:
json
"protocol_handler": {
"allowed_origin_protocol_pairs": {
"https://www.douyin.com": {
"bitbrowser": {} // 删除这个
}
}
}同时清除 safe_browsing.external_app_redirect_timestamps 中的 bitbrowser 相关时间戳。
第二层:注册黑洞处理程序
让系统对未知的自定义协议静默处理,不弹任何对话框:
黑洞脚本:~/.local/bin/bitbrowser-blackhole.sh
bash
#!/bin/sh
exit 0 # 直接退出,不执行任何操作桌面文件:~/.local/share/applications/{协议}-blackhole.desktop
ini
[Desktop Entry]
Name={协议} Blackhole
Exec=/home/a1/.local/bin/bitbrowser-blackhole.sh
Type=Application
NoDisplay=true
MimeType=x-scheme-handler/{协议};
Terminal=false注册到 mimeapps.list:
ini
[Default Applications]
x-scheme-handler/bitbrowser=bitbrowser-blackhole.desktop
x-scheme-handler/snssdk1128=snssdk1128-blackhole.desktop
x-scheme-handler/bytedance=bytedance-blackhole.desktop
x-scheme-handler/aweme=aweme-blackhole.desktop
x-scheme-handler/opencat=opencat-blackhole.desktop验证:
bash
xdg-open bitbrowser://test # 应静默退出,无弹窗第三层:Chrome Policy 封锁(最有效)
在系统级策略中直接封锁这些协议,浏览器不再向系统发送请求:
bash
sudo mkdir -p /etc/opt/chrome/policies/managed
sudo tee /etc/opt/chrome/policies/managed/block-protocol.json << 'EOF'
{
"URLBlocklist": [
"bitbrowser://*",
"snssdk1128://*",
"bytedance://*",
"aweme://*",
"opencat://*"
]
}
EOF关闭所有 Chrome/Edge 进程后重新打开,浏览器层直接拦截,不会触发 xdg-open。
验证:打开 chrome://policy,确认 URLBlocklist 已生效。
涉及的修改文件
| 文件 | 修改内容 |
|---|---|
~/.config/mimeapps.list | 注册 5 个黑洞协议处理器 |
~/.local/bin/bitbrowser-blackhole.sh | 黑洞脚本(空操作) |
~/.local/share/applications/*-blackhole.desktop | 5 个黑洞桌面文件 |
~/.config/microsoft-edge/Default/Preferences | 清除 douyin.com 的协议绑定 |
/etc/opt/chrome/policies/managed/block-protocol.json | Chrome Policy 封锁 |
参考
- Chrome 抖音链接跳转与 xdg-open 问题排除 — 同类问题的详细排查过程
- 禁用烦人的网页弹框 Xdg Open — 用 Chrome policy 屏蔽自定义协议的通用方法
- Brave #6291 — 浏览器层面允许自定义协议处理的 Feature Request