JavaScript可通过MediaRecorder API配合getDisplayMedia()实现浏览器内屏幕录制,需用户授权且仅限HTTPS或localhost安全上下文,须在用户手势触发下调用,支持Chrome、Edge、Firefox,Safari暂不支持。
JavaScript 本身不能直接录制屏幕,但可以通过 MediaRecorder API 配合 getDisplayMedia() 获取屏幕流,实现浏览器内的屏幕录制。这个功能需要用户主动授权,且仅在安全上下文(https 或 localhost)中可用。
调用 navigator.mediaDevices.getDisplayMedia() 请求用户选择要共享的屏幕、窗口或标签页。它返回一个 Promise,成功后得到一个 MediaStream 对象:
{ video: true, audio: false }(屏幕录制通常不捕获系统音频,Chrome 目前不支持系统音频捕获)audio: true 并选择带声音的源)拿到 stream 后,用它初始化 MediaRecorder 实例:
const recorder = new MediaRecorder(stream);dataavailable 事件,该事件在每次生成录像片段(Blob)时触发recorder.start() 开始录制;可传毫秒值指定分段时长(如 recorder.start(1000) 每秒触发一次 dataavailable)recorder.state 查看当前状态("inactive" / "recording" / "paused")在 dataavailable 事件中收集 Blob,并在停止后合并为完整视频文件:
let chunks = [];,在 dataavailable 中执行 chunks.push(even
t.data);
stop 事件,用 new Blob(chunks, { type: 'video/webm' }) 合并(注意 MIME 类型需与实际录制格式一致,常见为 video/webm)const url = URL.createObjectURL(blob);,再用 下载URL.revokeObjectURL(url) 释放内存实际使用中需关注以下几点:
getDisplayMedia
recorder.stop() 或 stream.getTracks().forEach(t => t.stop()) 清理资源基本上就这些。不复杂但容易忽略权限和上下文限制,动手前先确保是 https 环境并由用户点击触发。