【问题标题】:displaySurface constraint not restricting user share screen selection optionsdisplaySurface 约束不限制用户共享屏幕选择选项
【发布时间】:2021-02-26 04:40:02
【问题描述】:

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

我尝试将 displaySurface 显式设置为“监视器”,但仍然显示所有选项。

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;
},

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

【问题讨论】:

    标签: javascript google-chrome


    【解决方案1】:

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

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

    spec 说:

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

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

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

    【讨论】:

    • 很奇怪,为什么有人会使用/读取这样的输出值?否则,我们希望在最终用户尝试选择之前限制某些屏幕,例如,当您尝试打开具有多个选项卡的终端/cmd 实例并为共享屏幕查看器选择单个选项卡并尝试在选项卡之间切换屏幕时变黑。所以我最好选择通过限制一些选择来消除这种行为。无论如何感谢您指出这一点!
    • Google Meet 是如何做到这一点的呢? (meet.google.com)
    • @YousefAmar Google Chrome 附带一个名为“Google Hangouts”的隐藏扩展程序,该扩展程序仅适用于 Google 域。 Google Meet 使用该扩展程序。扩展本身使用它来实现:developer.chrome.com/extensions/…
    • @AlicanC 谢谢,我发现了here。这不是令人难以置信的反竞争吗?谷歌如何摆脱它?似乎没有人对此发表任何评论
    • @YousefAmar 是。我实际上提出了这个问题,但没有得到答案:twitter.com/AlicanC/status/1314280197546545154
    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多