Почему Capture=user не переключает камеру моего телефона на переднюю?

Я попробовал следующий атрибут capture, чтобы установить элемент input, чтобы попытаться выбрать фронтальную камеру. user лицом вперед, а environment лицом назад.

Однако во время экспериментов с Chrome (последняя версия) на мобильном устройстве (Pixel 1, последняя версия ОС) задняя камера по-прежнему выбрана.

Я использовал фрагмент примера:

<form action="server.cgi" method="post" enctype="multipart/form-data">
  <input type="file" name="image" accept="image/*" capture="user">
  <input type="submit" value="Upload">
</form>

(из https://w3c.github.io/html-media-capture/#the-capture-attribute)

Я могу изменить accept, чтобы на моем телефоне требовался video, чтобы этот и другие атрибуты работали, но не атрибут capture.

EDIT: я использую последнюю версию браузера Android Chrome. На следующей странице подразумевается, что iOS и более ранние версии Android Chrome вообще не могут использовать capture, но в остальном могут использовать capture. https://caniuse.com/#search=html-media-capture


person imagineerThat    schedule 23.06.2019    source источник
comment
Возможно ли, что Chrome просто не реализовал эту функцию?   -  person jhpratt    schedule 17.07.2019
comment
Да, это возможно, но я не могу это доказать. Добавлено редактирование в сообщение для получения дополнительной информации. Хотелось бы, чтобы это было задокументировано более четко.   -  person imagineerThat    schedule 21.07.2019
comment
Я бы сказал, что доказательство в том, что это не работает. Я постараюсь так или иначе найти какую-нибудь официальную документацию.   -  person jhpratt    schedule 22.07.2019
comment
Ok. Я новичок в HTML. Не работает — не лучшая лакмусовая бумажка для новичка, когда многие вещи могут сломаться при неправильной реализации.   -  person imagineerThat    schedule 22.07.2019
comment
Ах, я предположил, что вы были относительно опытны, основываясь на типе вещей, которые вы пытались сделать. Однако, как правило, пример кода из спецификации W3C должен работать, если он реализован.   -  person jhpratt    schedule 22.07.2019
comment
Спасибо. Приятно осознавать, что это исключение.   -  person imagineerThat    schedule 22.07.2019


Ответы (3)


Я клонировал репозиторий Chromium сегодня (21 июля 2019 г.). Затем я использовал ripgrep, чтобы получить список файлов, которые не содержат capture. После передачи этого списка в rm я удалил все каталоги, которые были либо пустыми, либо явно неактуальными (например, телеметрия). Просмотр оставшихся ~50 файлов был относительно тривиальной задачей.

Надеемся, что команда Chrome найдет время для реализации этого в будущем, но в настоящее время нет никаких указаний на то, что такое поведение поддерживается в официальной документации, официальных сообщениях в блогах или в самом коде.

Я знаю, это не тот ответ, который вы хотели бы услышать, но это факты, которые я нашел.

person jhpratt    schedule 22.07.2019
comment
Это звучит довольно определенно. Хорошая идея посмотреть на сам код. - person imagineerThat; 22.07.2019

Будет ли именно Chrome мешать правильной работе кода? Я предлагаю использовать другой браузер, такой как Firefox, чтобы проверить эту теорию. Если это удастся в Firefox, то простой ответ: Chrome еще не реализовал это.

person Fallen13    schedule 21.07.2019
comment
Спасибо. Firefox также не обеспечивает желаемого поведения (в любом случае это задокументировано). На этой странице подразумевается, что iOS Safari и более ранние версии Android Chrome вообще не могут использовать capture (у меня последняя версия Android), но в остальном могут использовать capture. caniuse.com/#search=html-media-capture - person imagineerThat; 21.07.2019
comment
Ответы должны быть чем-то большим, чем предположения, особенно с приложенной наградой. - person jhpratt; 22.07.2019

Вот несколько тестов, я включил пользовательский агент:

Не работал с :

  • Android Chrome: Mozilla/5.0 (Linux; Android 6.0; Ilium X510) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36
  • Android Firefox: Mozilla/5.0 (Android 6.0; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0

Работал с:

  • iPhone Chrome: Mozilla/5.0 (iPhone; ЦП iPhone OS 12_3, например Mac OS X) AppleWebKit/605.1.15 (KHTML, например Gecko) CriOS/75.0.3770.103 Mobile/15E148 Safari/605.1
  • iPhone Safari: Mozilla/5.0 (iPhone; ЦП iPhone OS 12_3_1, как Mac OS X) AppleWebKit/605.1.15 (KHTML, например Gecko) Version/12.1.1 Mobile/15E148 Safari/604.1

Вкратце:

  • Все протестированные iPhone-навигаторы отображали вид с передней камеры, когда захват осуществляется пользователем, и вид с задней камеры, если это окружающая среда.
  • Оба протестированных Android-навигатора всегда отображали вид с задней камеры.

Таким образом, независимо от информации в принятом ответе, похоже, это не проблема браузера. Было бы полезно, если бы он корректно работал с устройством Android и определенным браузером.

Я надеюсь, что другие люди могут поделиться тестами на своих Android-устройствах, в частности на рабочих, отображающих вид с фронтальной камеры при тестировании значения атрибута capture="user".

person CARLOS AGUIRRE    schedule 24.07.2019
comment
Это это проблема с браузером. Спецификация говорит, что это должно работать, но это не так. И в Chrome есть нулевой код, о котором идет речь. - person jhpratt; 25.07.2019
comment
все равно в хроме в айфоне работает хорошо, несмотря на нулевой код в хроме. Возможно, этот эксклюзивный код для iOS не задокументирован. - person CARLOS AGUIRRE; 30.07.2019
comment
Это связано с тем, что все браузеры на iPhone используют движок Safari в соответствии с требованиями Apple. Обратите внимание, что я искал не документацию, а сам код. - person jhpratt; 30.07.2019