Provavelmente, em algum momento, você tentou usar uma função ‘nativa’ do navegador de forma dinâmica e recebeu um erro de invocação ilegal como agradecimento por isso.
var userMedia = (function() {
navigator.getUserMedia() || navigator.webkitGetUserMedia()
})();
userMedia.call(this, args...);
// => illegal invocation error
Entre criá userMedia
-lo e chamá-lo como uma função, as duas getUserMedia
funções não estão mais vinculadas ao escopo correto. A solução é simples:
var userMedia = (function() {
navigator.getUserMedia().bind(navigator) ||
navigator.webkitGetUserMedia().bind(navigator)
})();
Vincular explicitamente esses métodos ao seu contexto original resolverá o problema.