Ответ 1
Он только открывает камеру, потому что вы используете логический атрибут capture
. Согласно Спецификация HTML Media Capture:
capture
... если указано, указывает, что захват носителя непосредственно из среды устройства с использованием механизма захвата носителя является предпочтительным. Когда указан атрибут захвата, пользовательский агент должен вызывать сборщик файлов определенного типа управления захватом.В этой спецификации термин тип управления захватом относится к специализированному типу элемента управления выбора файлов, который оптимизирован для пользователя для непосредственного захвата носителя типа MIME, указанного атрибутом accept, используя механизм медиа-захвата.
Термин механизм захвата носителя относится к локальному устройству захвата данных устройства, например, к камере или микрофону.
В вашем случае лучше использовать <input>
без capture
, в соответствии с спецификацией HTML, кажется, что опция выбора общее поведение браузера:
Пользовательские агенты могут использовать значение этого атрибута (accept) для отображения более подходящего пользовательского интерфейса, чем общий сборщик файлов. Например, с учетом значения image/*, пользовательский агент может предложить пользователю возможность использовать локальную камеру или выбрать фотографию из своей коллекции фотографий;
Проведено предыдущее обсуждение этого поведения "управление входным файлом" 3 года назад: Управление вводом HTML файла с атрибутами захвата и приема работает неправильно? Вы можете видеть, что "показать диалоговое окно опции, когда атрибут захвата существует" заставляет людей путать.
На мой взгляд, это изменение iOS в 10.3.1 является исправлением для управления вводом файлов. В противном случае не было бы различия с атрибутом capture
или без него.