Не удалось получить свойство enumerateDevices неопределенной или нулевой ссылки

Я использую enumerateDevices (см. ссылку здесь) чтобы получить список камер и микрофонов пользователя.

Этот код отлично работает в Chrome:

$(document).ready(function(){
    navigator.mediaDevices.enumerateDevices()
    .then(gotDevices)
});

Но поскольку он не поддерживается в IE, он выдает ошибку:

Не удалось получить свойство enumerateDevices неопределенной или нулевой ссылки

Мой вопрос: есть ли альтернатива, которую я могу использовать во всех браузерах?


person Koby Douek    schedule 03.04.2017    source источник
comment
Так вы говорите об InternetExplorer, а не об Edge, верно? Поскольку Edge поддерживает enumerateDevices, но IE не поддерживает ничего из API MediaStream, поэтому мне интересно, что вы будете делать с этим списком устройств, даже если бы его можно было получить? (ps: это не из веб-API, может быть, какая-то флешка, или java, или кто знает что, может сказать).   -  person Kaiido    schedule 03.04.2017
comment
Да, мне тоже нужна поддержка IE.   -  person Koby Douek    schedule 03.04.2017
comment
@Kaiido Я использую webRTC, который поддерживается в IE 10,11. получить устройства просто для того, чтобы убедиться, что у пользователя есть камера и микрофон.   -  person Koby Douek    schedule 03.04.2017
comment
Как ? IE не поддерживает getUserMedia, я думаю, вы используете резервную копию flash или java, не так ли? Если это так, не помечайте свой вопрос javascript, у вас не будет никакого решения js. И уточните у авторов вашего запасного варианта, не предоставляют ли они способ как-то получить этот список.   -  person Kaiido    schedule 03.04.2017
comment
IE поддерживает это.   -  person Koby Douek    schedule 03.04.2017
comment
Напевайте нет из любого источника и с моих виртуальных машин тоже. Вероятно, у вас есть плагин.   -  person Kaiido    schedule 03.04.2017
comment
PS: если ваш плагин делает доступным объект MediaStreamTrack и его метод getSources() (обычно только мерцание), вы можете попробовать его, как adapter.js делает.   -  person Kaiido    schedule 03.04.2017
comment
См. stackoverflow.com /вопросы/24676240/. Любая поддержка того, о чем вы просите, должна исходить от полифилла, который вы используете для getUserMedia. Они идут вместе.   -  person jib    schedule 03.04.2017


Ответы (2)


navigator.mediadevices также может быть неопределенным в небезопасном контексте.

Вам нужно иметь https: вместо http:


В хроме есть несколько экспериментальных флагов, позволяющих это сделать:

chrome://flags/#allow-insecure-localhost

chrome://flags/#unsafely-treat-insecure-origin-as-secure

person Bhojendra Rauniyar    schedule 25.04.2020

В соответствии с API метода mediaDevices.enumerateDevices. Этот метод не поддерживает IE.

Совместимость браузера для этого метода:

chrome: 45.0
FireFox (GecKo): 39
Internet Explorer: не поддерживается
Opera: не поддерживается
safari (webKit): не поддерживается

Надеюсь это поможет!

person saktivel    schedule 03.04.2017
comment
Flash имеет доступ к камере и микрофону пользователя (если они включили его в своей панели управления Flash)... вы можете сначала протестировать функцию для поддержки mediaDevices, а если нет, вернуться к стороннему элементу управления flash (flash - это элемент управления ActiveX в МСИЭ). Эта ссылка веб-поиска перечисляет приложения Flash-чата. bing.com/search?q=flash+chat+applications - person Rob Parsons; 04.04.2017