部署站点后,我无权访问 navigator.mediaDevices。我该如何解决?

I do not have have access to navigator.mediaDevices when the site is deployed. How do I fix this?

我目前正在尝试使用 WebRTC api 并让一切在本地运行。 当我部署到 surge.sh 时,我无法访问 navigator.mediaDevices 对象。我该如何解决?

下面这行代码是我遇到问题的地方。

const stream = await navigator.mediaDevices.getDisplayMedia({video: {mediaSource: 'screen'}});

我收到以下错误消息:

TypeError: Cannot read property 'getDisplayMedia' of undefined

您需要 https。

navigator.mediaDevices 现在仅在 Chrome 74, Firefox 68, and in the spec 的 SecureContext 中可用,这意味着该对象将在不安全的上下文 (http) 中丢失。

正如 jib 回答的那样,当网络服务器使用 HTTP 方案而不托管在 localhost 上时,navigator.mediaDevices 不可用,但在 chrome/chromium 中除外:

$ chromium --unsafely-treat-insecure-origin-as-secure=http://WEBSERVER_FQDN:PORT_NUMBER

--unsafely-treat-insecure-origin-as-secure 命令行选项允许放宽限制。当 HTTPS 尚未设置或您需要分析原始未加密的 HTTP 消息(即 wireshark)时,它对 developing/debugging 很有用。