getUserMedia () in JavaScript normalisiert sich über Browser hinweg. Illegale Anrufung

8

Wenn ich Folgendes versuche:

%Vor%

In Chrome wird der Fehler "Illegal Invocation" ausgelöst.

Aber wenn ich das tue:

%Vor%

Ich habe versucht, ein bisschen zu suchen, und ich habe gelesen, dass es ein Kontexthema ist. Aber ich konnte immer noch nicht verstehen, was das bedeutet. Im ersten Beispiel erhält die Variable getUserMedia einen Verweis auf die Funktion, die nicht undefiniert ist (d. H. Im Falle von chrome ist es webkitGetUserMedia). Warum kann ich sie nicht mithilfe dieser Variablen aufrufen?

(Dies ist eine allgemeine JavaScript-Frage, nicht spezifisch für WebRTC .)

    
user3599803 18.12.2014, 17:07
quelle

1 Antwort

14

Offensichtlich muss der Kontext das Objekt navigator sein, aus welchem ​​Grund auch immer. Ich habe das gleiche mit console.log bemerkt - es benötigt den console Kontext.

Wenn Sie navigator.getUserMedia ausführen, wird der Kontext automatisch auf navigator gesetzt, wie zu jeder anderen Zeit, zu der Sie eine Methode für ein Objekt aufrufen. Wenn Sie jedoch nur getUserMedia ausführen, ist der Kontext (standardmäßig) global und gibt daher einen Illegal Invocation Fehler aus.

Wenn Sie es immer noch als Variable speichern wollen, können Sie es zur Laufzeit mit dem richtigen Kontext aufrufen:

%Vor%

Sie können auch bind verwenden, um den Kontext mit der Variablen zu speichern, so dass Sie ihn nicht jedes Mal aufrufen müssen:

%Vor%     
Scimonster 18.12.2014, 17:12
quelle