gpt4 book ai didi

javascript - JavaScript 中的 getUserMedia() 跨浏览器规范化。非法调用

转载 作者:可可西里 更新时间:2023-11-01 02:33:12 26 4
gpt4 key购买 nike

当我尝试执行以下操作时:

var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
// now I try to invoke it with some parameters:
getUserMedia(...) // not working!

它在 Chrome 中抛出“非法调用”错误。

但如果我这样做:

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
// now invoke it with the navigator
navigator.getUserMedia(..) // Works

我尝试搜索了一下,发现这是一个上下文问题。但我还是不明白那是什么意思。在第一个示例中,getUserMedia 变量最终获得了对未定义函数的引用(即,对于 chrome,它是 webkitGetUserMedia),那么为什么我不能使用该变量调用它?

(这实际上是一个一般的 JavaScript 问题,并不特定于 WebRTC。)

最佳答案

显然,无论出于何种原因,它都需要将上下文作为 navigator 对象。我注意到 console.log 也有同样的事情 - 它需要 console 上下文。

当您执行 navigator.getUserMedia 时,上下文会自动设置为 navigator,就像您在其他任何时候调用对象的方法一样。但是,如果您只是执行 getUserMedia,上下文(默认情况下)是全局的,因此它会抛出一个非法调用错误。

如果你仍然想把它保存为一个变量,你可以在运行时用正确的上下文调用它:

var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
// now I try to invoke it with some parameters:
getUserMedia.call(navigator, ...)

您还可以使用 bind 来保存变量的上下文,这样您就不必每次都调用它:

var getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia).bind(navigator);
// now I try to invoke it with some parameters:
getUserMedia(...)

关于javascript - JavaScript 中的 getUserMedia() 跨浏览器规范化。非法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27551975/

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