displaySurface 约束不限制用户共享屏幕选择选项

moh*_*bry 8 javascript google-chrome

在共享他自己的屏幕之前,添加 displaySurface 不会引起用户的选项限制。我试图将这些选项限制为仅让用户选择浏览器选项卡以外的任何内容。SS

我尝试将 displaySurface 显式设置为 'monitor' 并且仍然显示所有选项。

async startCaptureMD() {
  let captureStream = null;
  var screen_constraints = {
     video: {
        cursor: "always",
        displaySurface: "monitor"
     }
  };
  try{
     captureStream = await 
     navigator.mediaDevices.getDisplayMedia(screen_constraints);
  }catch(err){
    console.log(err.message, err.code);
  }
  return captureStream;
},
Run Code Online (Sandbox Code Playgroud)

预期的结果是显示“您的整个屏幕”或“应用程序窗口”而不是“Chrome 选项卡”。

Gra*_*ing 7

你不能。该MDN文档解释说,这是为了安全:

约束永远不会导致屏幕共享 API 可捕获的源列表发生更改。这确保了 Web 应用程序不能通过限制源列表直到只剩下一项来强制用户共享特定内容。

规范说:

用户代理必须让最终用户每次从所有可用选项中选择要共享的显示表面,并且不得使用约束来限制该选择。

所以浏览器正在做正确的事情。似乎displaySurface只是一个输出值。如果你已经有了一个MediaStreamTrack调用getSettings(),那么你可以阅读 displaySurface。

我也很困惑,所以我修复了 MDN 文档。MDN 文档需要更新以不displaySurface列为“一个字符串(或字符串数​​组),指示允许用户选择的屏幕表面类型”。

  • 那么 Google Meet 是如何做到这一点的呢?(meet.google.com) (5认同)
  • 很奇怪,为什么有人会使用/读取这样的输出值?否则,我们希望在最终用户尝试选择之前限制某些屏幕,因为例如当您尝试打开具有多个选项卡的终端/cmd 实例并且为共享屏幕查看器选择单个选项卡并且尝试在屏幕选项卡之间切换时变黑。所以我宁愿选择通过限制某些选择来消除这种行为。无论如何,感谢您指出这一点! (2认同)
  • @YousefAmar Google Chrome 附带了一个名为“Google Hangouts”的隐藏扩展程序,该扩展程序仅适用于 Google 域。Google Meet 使用该扩展程序。扩展本身使用此来实现:https://developer.chrome.com/extensions/desktopCapture#method-chooseDesktopMedia (2认同)
  • @AlicanC 谢谢,我发现了[这里](/sf/ask/4456073891/)。但这不是极其反竞争吗?谷歌是如何逃脱惩罚的呢?好像没有人说过这件事 (2认同)
  • @YousefAmar 是的。我实际上提出了这个问题,但没有得到答案:https://twitter.com/AlicanC/status/1314280197546545154 (2认同)
  • 那么有没有办法改变默认显示的内容呢?还让用户有选择吗? (2认同)
  • 也想知道 (2认同)