我正在使用getDisplayMedia
开发应用程序。当浏览器提示我共享我的屏幕/窗口并且我选择要共享的特定窗口时,该窗口现在突然聚焦并位于我的其他窗口前面(特别是在浏览器窗口的前面!我用Firefox和Chrome测试了这个,每个都在Ubuntu和Windows 10上。我使用此页面进行测试。
我个人觉得这种行为有点出乎意料和烦人。我还担心我的应用程序的技术倾向较低的用户会对此感到非常困惑。所以我希望浏览器即使在选择窗口后也能保持专注。是否有可能改变这种行为?我检查了getDisplayMedia
上的MDN文档,但没有找到任何与此相关的内容。我在其他地方也没有找到任何有关这方面的信息。
如果无法调整这种行为,我想知道:为什么?是技术限制吗?是否是一项隐私/安全功能,让用户更清楚地知道此窗口现在已共享?(就我个人而言,我真的不认为它对用户有帮助,但没关系。
现在可以在共享选项卡内容或应用程序窗口时使用 CaptureController API 执行此操作。
截至目前,我无法防止在Chrome中共享"显示器"时失去焦点。在这种情况下,焦点将转移到"...正在共享您的屏幕[停止共享]隐藏"模式。
const controller = new CaptureController();
controller.setFocusBehavior("no-focus-change");
const mediaStreamOptions: DisplayMediaStreamOptions = {
// ...
controller
};
navigator.mediaDevices.getDisplayMedia(mediaStreamOptions)
.then(videoStream => {
const newVideoTrack = videoStream.getVideoTracks()[0];
setVideoTrack(newVideoTrack);
}).catch(console.error);
有关 API 及其用法的更多信息,请参阅此处:
- https://developer.chrome.com/docs/web-platform/conditional-focus/
- https://developer.mozilla.org/en-US/docs/Web/API/CaptureController
- https://www.w3.org/TR/screen-capture/#capturecontroller
不,通常不可能更改此行为,因为它是有意为之的。
虽然此行为不是任何规范强制要求的,但如今大多数浏览器都会将刚刚共享的窗口推到前面。
基本原理是典型的用例是有人在网络电话会议中演示文档。在该上下文中,假设由于这是用户启动的操作(它需要用户手势(,因此用户打算与他们刚刚共享的图面进行交互。
过去,浏览器过去不这样做,用户对正在发生的事情以及共享哪个窗口感到困惑。
如果您有一个令人信服的用例,其中存在问题,请考虑在规范的新问题中对其进行描述。