Edge 的一个版本更新,让之前一直工作的录屏代码出现问题了,具体表现:无法再获取当前选项卡了。
试了很多示例和 B 站的 Web 直播,都无法获取当前选项卡,内心烦燥。
于是重新查看 MediaDevices: getDisplayMedia
方法介绍,看到了一个参数:selfBrowserSurface
,他的作用是指定浏览器是否应允许用户选择要捕获的当前选项卡。
与我想要的功能一致。
selfBrowserSurface:
一个枚举值,指定浏览器是否应允许用户选择要捕获的当前选项卡。这有助于避免视频会议应用无意中共享自己的显示器时遇到的“无限镜厅”效果。可能的值为include
,提示浏览器应在提供的捕获选项中包含当前选项卡,以及exclude
,提示应将其排除。规范不强制要求默认值;有关特定于浏览器的默认值,请参阅浏览器兼容性部分。
所以 Chrome/Edge 升级到 113 及以上版本时,原来该参数的默认值由 include
更新为 exclude
了,导致原来的代码无法再获取当前选项卡页面了。
更新后的代码如下:
var displayMediaOptions: DisplayMediaStreamOptions = {
video: true,
audio: true,
selfBrowserSurface: 'include'
};
navigator.mediaDevices.getDisplayMedia(displayMediaOptions).then((stream) => {
// handle display media stream
});