gpt4 book ai didi

Safari 14.0.3 getUserMedia (WebRTC) 权限提示在不允许第一次后第二次提示

转载 作者:行者123 更新时间:2023-12-04 03:33:55 27 4
gpt4 key购买 nike

我认为在 Safari 中有一个意外的 getUserMedia 行为,我想知道我是否遗漏了什么。

在 Chrome/Firefox 中,如果我不允许第一个 getUserMedia({audio: true, video: true}) 提示每次调用它都会失败并显示错误:NotAllowedError: The当前上下文中的用户代理或平台不允许请求,可能是因为用户拒绝了许可。 这似乎没问题。

但是在 safari 中,如果我不允许第一个 getUserMedia 调用,第二个具有相同约束的调用将再次提示,任何其他约束将失败并出现先前的错误。

我创建了一个简单的复制存储库 here您可以在每个浏览器上运行以进行比较(您必须拒绝第一个提示才能重现错误)。奇怪的是,相同的代码每次都在 jsfiddle 上运行。仅适用于 safari 并为其他浏览器保持相同的行为(我猜是由于运行代码的 iframe)

Here我重现问题的录音,以便更好地理解。

GetUserMedia调用顺序:

// 1: press "Not allow"
getUserMedia({ video: true, audio: true });

// 2: will prompt again (that's the bug) and press "Allow"
getUserMedia({ video: true, audio: true });

// 3: will fail (that's the expected behaviour)
getUserMedia({ video: true, audio: true });

// 3bis: will fail too (that's the expected behaviour)
getUserMedia({ video: {deviceId: {exact: 'aValidDeviceId' }}, audio: {deviceId: {exact: 'aValidDeviceId' }} });

我是否遗漏了什么或者这确实是 safari 的错误?

最好的问候

最佳答案

这里的 Safari 没有任何问题。在 specifications 眼中,浏览器是用户代理 ,它说:

This is intentionally vague about the details of the permission UI and how the UA infers user intent. UAs should be able to explore lots of UI within this framework.

Web 上没有单一的权限模型。这是好事。

如果您发现自己编写的代码依赖于一种浏览器在权限方面的工作方式,请停下来重新思考。

任何依赖于 Safari 以可预测的方式响应 “NotAllowedError” 的代码,都可能试图通过社交工程获得结果,也许是为了帮助用户通过单击哪些浏览器按钮来启用访问您的网站需要正常运行。

但是浏览器无法将您的行为与恶意网站的行为区分开来,它们需要一些松懈来保护用户。

因此,对 "NotAllowedError" 使用react的正确方法是假设它来自用户。在它来自用户代理的情况下,假设代理是为了用户的利益行事。

如果您怀疑用户代理有误,请在该特定用户代理上提交错误,以便改进。

权限很棘手。

Web 的独特之处在于允许安全浏览未经管理的网站,甚至是恶意网站。

浏览器(“用户代理”)是唯一被认为在权限方面以用户最佳利益行事的可信方。不能信任网站来管理它们。

但是浏览器在管理用户权限的方式上有很大的不同。这包括当用户在他们看来已经足够困扰时他们的 react 。这是因为尚未找到便利性和隐私性之间的理想权衡。因此,这方面的差异化创新是好的,钙化还为时过早。

免责声明:权限在不断发展

浏览器并不完美。 Web 开发人员首当其冲地受到这种不完善和差异化的影响,并且不能因为希望事情变得更简单而受到指责。毕竟,我们大多数人都在非恶意网站上工作。

因此,有时可能需要围绕某些浏览器进行社交工程(在您提交错误后)。但在 stackoverflow 上,我认为我们首先应该给出“正确”的答案,并将其他所有内容作为变通办法作为序言。

关于Safari 14.0.3 getUserMedia (WebRTC) 权限提示在不允许第一次后第二次提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67320326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com