getDisplayMedia 录制屏幕,用 MediaRecorder 编码,再用 downloads API 保存结果。
选择一个捕获 API
getDisplayMedia 不需要 manifest 权限。浏览器会显示一个来源选择器,这个提示本身就是用户同意。tabCapture 跳过选择器,但需要 tabCapture 权限,以及此前在扩展上的一次用户手势,比如点击 action。
Manifest
只有当你从 offscreen 文档录制时才把offscreen 加入 permissions。
manifest.json
打开一个录制页面
popup 在失去焦点时会关闭,这会中断它的录制。请改为把录制器放在一个专用页面上。把recorder.html 与 recorder.js 放进 pages/ 特殊文件夹,Extension.js 会把它们作为入口编译。
background.js
用 getDisplayMedia 录制
getDisplayMedia 需要用户手势,所以要在点击处理器里调用它,永远不要在页面加载时调用。
pages/recorder.js
改为捕获活动标签页
使用tabCapture 时,后台把一个 stream id 交给你的页面,页面再把它变成一个流。不会出现选择器。
pages/recorder.js
MediaRecorder 流程。
在后台录制
要在没有任何可见扩展页面的情况下持续录制,Chrome 提供了 offscreen 文档。用chrome.offscreen.createDocument 和 USER_MEDIA 原因创建一个,然后在那里运行捕获代码。这需要 offscreen 权限,且只在 Chromium 上可用。
运行
Firefox 说明
getDisplayMedia与MediaRecorder在 Firefox 的扩展页面中可用,所以主教程是可移植的。- Firefox 不支持
tabCapture和 offscreen 文档。 - 使用浏览器特定的 manifest 字段,让
tabCapture权限不进入 Firefox 构建。
从模板开始
special-folders-pages 模板展示了承载录制页面的 pages/ 布局。
最佳实践
- 录制结束时停止每一条轨道,让浏览器移除共享指示器。
- 按浏览器选择捕获 API:
getDisplayMedia各处通用,tabCapture用于 Chromium 的仅标签页流程。 - 保持
saveAs: true,让用户选择录制文件的去处。 - 用
recorder.start(timeslice)对长录制分块,控制内存占用。

