ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript中的getUserMedia()在浏览器中规范化.非法调用

2019-10-07 18:42:45  阅读:275  来源: 互联网

标签:javascript function invocation getusermedia


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

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.)

解决方法:

显然,无论出于何种原因,它都需要上下文作为导航器对象.我已经注意到console.log也一样 – 它需要控制台上下文.

当您执行navigator.getUserMedia时,上下文会自动设置为导航器,就像您在对象上调用方法时一样.如果您只是执行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,function,invocation,getusermedia
来源: https://codeday.me/bug/20191007/1868504.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有