linux 系统打开虎牙直播等网页出现 xdg-open 弹窗解决办法
01. xdg-open
是什么?
xdg-open
是 XDG Utilities 提供的一个命令,它用于 打开 URL 或文件,并调用系统默认的应用来处理。例如:
xdg-open https://www.google.com
会调用默认浏览器打开网页。xdg-open file.pdf
会调用默认的 PDF 阅读器。xdg-open mailto:someone@example.com
会调用默认的邮件客户端。
当 Chrome 访问虎牙直播时,虎牙的网页可能会尝试使用 xdg-open
来打开某些自定义协议(如 kiwi://
),但 Linux 上 没有注册 kiwi://
的处理程序,所以 xdg-open
无法正确处理,最终导致错误弹窗。
02. kiwi://
是什么?
kiwi://
可能是虎牙直播用来处理 Web 事件的一个 自定义协议,可能用于:
- 直播插件或扩展的内部通信(比如检测网页状态)。
- 调用某个本地应用(如虎牙 PC 客户端)。
- 触发特定的浏览器事件(如
domcontentloaded
)。
在 Windows 或 macOS,虎牙可能有相应的软件可以处理 kiwi://
协议,但在 Linux,这个协议没有被正确注册,所以 xdg-open
直接报错。
03. Chrome 为什么调用 xdg-open
?
Chrome 会调用 xdg-open
处理某些协议(如 mailto:
、webcal:
),以及一些网站定义的自定义协议。虎牙直播的 JavaScript 可能包含类似的代码:
1 |
|
或者:
1 |
|
这会导致 Chrome 触发 xdg-open kiwi://domcontentloaded
,然后 xdg-open
由于找不到处理程序而报错。
问题在于:
- Chrome 不检查
kiwi://
是否有处理程序,直接调用xdg-open
。 xdg-open
发现kiwi://
不是标准 URL,也 没有找到相应的应用,就会报错。
04. 强行解决问题
sudo vim /usr/bin/xdg-open
在 xdg-open
文件的最前面添加:
1 |
|
这样它在执行任何逻辑之前就会检查 kiwi://
相关的 URL,从而告诉 xdg-open
:
- 如果 URL 以
kiwi://
开头,直接退出,不执行任何操作。 - 这样,Chrome 即使调用
xdg-open kiwi://domcontentloaded
,也不会触发弹窗。
最终,xdg-open
不会继续执行 默认的 URL 解析逻辑,错误弹窗也不会出现。
在
/usr/bin/xdg-open
里添加拦截规则,可以避免不必要的错误。这个方法适用于 任何未知的、导致错误的协议,比如:
1
2
3
>if [[ "$1" =~ ^(kiwi|huya|wegame):// ]]; then
exit 0
>fi
05. 温和的解决方案
在 Linux 上注册 kiwi://
处理程序(静默处理请求) 可以手动创建一个假的 kiwi://
处理器:
1 |
|
然后注册它:
1 |
|
这样 xdg-open kiwi://xxx
就不会弹窗了。