火狐浏览器默认情况下仅允许开启一个画中画窗口,这对于有多屏监看需求的用户来说确实不够方便。想要同时播放多个视频,核心在于修改一个关键配置项:将 media.videocontrols.picture-in-picture.allow-multiple 设置为 true。其他所谓的变通方法,本质上都只是辅助手段。

修改 about:config 启用多个 PiP 实例
这是最直接也最底层的解决方案。从 Firefox 89+ 版本开始,浏览器就内置了这一开关,但默认处于关闭状态,因此新触发的画中画窗口总会直接覆盖掉旧窗口。
- 在地址栏输入
about:config,点击“接受风险并继续” - 搜索
media.videocontrols.picture-in-picture.allow-multiple - 双击该选项,将数值从
false改为true - 无需重启浏览器,修改后立即生效;但已经打开的单画中画窗口不会自动变成多个,需要重新触发一次
需要注意的是:此配置仅控制“是否允许多个画中画并发运行”,它无法解决网站禁用 API 或 video 元素本身未正确暴露的问题。
确保多个 PiP 窗口真正共存的操作要点
配置项已经打开,但第二个画中画窗口仍然覆盖了第一个——这种情况并不少见。根本原因在于浏览器将操作误判为“同一上下文的请求”。
- 第一个视频进入画中画后,关键一步是不要让它保持聚焦状态:点击其他标签页或桌面空白区域,使其失去 DOM 焦点
- 第二个视频必须在独立标签页中播放,播放后手动单击视频区域(确保 video 元素获取到焦点)
- 使用快捷键
Ctrl + Shift + P或右键菜单触发,尽量避免依赖页面自带的控件按钮——部分网站的按钮会复用同一个画中画实例 - 如果遇到某些网站(例如部分 Bilibili 嵌入页)始终只弹出一个窗口,很可能是后台调用了
document.exitPictureInPicture()主动清理旧实例。此时需要使用不同用户配置文件启动独立的 Firefox 实例
通过多用户配置文件启动隔离的 Firefox 实例
如果 about:config 设置无效,或者怀疑是扩展、Cookie、媒体策略等因素造成干扰,这套方案就是最彻底的隔离方式——每个实例拥有完全独立的存储和运行环境,互不干扰。
- 访问
about:profiles,创建两个新配置文件,例如命名为PiP-A和PiP-B - 关闭所有 Firefox 窗口
- Windows 下使用命令行启动:
firefox.exe -P "PiP-A" -no-remote;macOS 下:/Applications/Firefox.app/Contents/MacOS/firefox -P "PiP-A" -no-remote - 再打开一个终端,使用
PiP-B配置名启动另一个实例;两个窗口互不知晓对方存在,各自都能开启一个画中画,效果相当于使用两台物理浏览器
缺点在于内存占用会翻倍,且无法跨实例共享书签或登录状态——但它能绕过几乎所有策略和脚本层面的干扰,尤其适合需要长期、多源监看的场景。
用 JavaScript 手动调用 requestPictureInPicture() 创建 PiP
这种方法适用于网页本身未提供画中画按钮,或需要精确控制哪个 video 元素进入画中画的情况——例如 iframe 中嵌入的视频或自定义播放器。
- 打开开发者工具(
F12),切换到 Console 标签页 - 执行:
document.querySelector('video').requestPictureInPicture()(记得将选择器替换为目标视频对应的选择器) - 如果报
NotAllowedError,说明当前上下文不满足触发条件:可能是视频尚未播放、未静音,或未通过用户手势(如 click)激活 - 可以在视频的
click事件回调中调用该函数,以确保满足“用户交互触发”的要求
这种方式不依赖页面 UI,但每次需要手动执行;若想批量处理,可以编写临时 userscript 注入,但需注意跨域 iframe 的限制。
归根结底,此事的真正难点不在于“如何打开多个”,而在于让多个画中画窗口稳定地同时存在,不互相抢占焦点、不被系统级策略中断——尤其是当其中一个视频暂停、缓冲或跳转时,Firefox 可能会悄悄销毁它的画中画实例。因此更推荐的做法是:先用 about:config 开启多实例支持,再配合正确的操作顺序;如果场景较为复杂,再考虑采用多配置文件方案。
