Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Автонажатие кнопки "обзор" при загрузке страницы для Input type=file (https://javascript.ru/forum/misc/79652-avtonazhatie-knopki-obzor-pri-zagruzke-stranicy-dlya-input-type%3Dfile.html)

KorbenAV 04.03.2020 14:39

Автонажатие кнопки "обзор" при загрузке страницы для Input type=file
 
Добрый день,

ТЕКУЩИЙ сценарий использования кода, указанного в конце сообщения:
1) открываем страницу на андройде (другие платформы сейчас не важны, хотя думаю ios ведет себя схожим образом)
2) нажимаем кнопку [Обзор]
3) открывается встроенное в смартфон приложение Диктофон, нажимаем [Запись], нажимаем [Готово]
4) форма с записанным на диктофон файлом по обработчику onClick уходит на сервер

ТРЕБУЕМЫЙ сценарий использования:
Всё то же самое, но без п.2. Т.е. событие, запускаемое этой кнопкой, должно вызываться автоматически при загрузке страницы.

Цель - уменьшить количество нажатий по кнопкам.

Буду благодарен за любые рекомендации. Всё что нашел по-разным причинам не помогло :(

<form enctype="multipart/form-data" action="file.php" method="POST">
<input onchange="this.form.submit()"  name="userfile" type="file" accept="audio/*" capture id="recorder">
</form>

voraa 04.03.2020 16:27

Единственное, что можно предложить - попробовать вызвать событие функцией click() на кнопке.
По поводу ios, утверждается, что они это не поддерживают
https://caniuse.com/#search=capture

voraa 04.03.2020 16:45

Не. Функция не срабатывает
File chooser dialog can only be shown with a user activation.

KorbenAV 05.03.2020 15:54

Спасибо за ответы. Печально :(

kittywaresz 21.03.2021 16:17

Добрый день, обойти проблему с "File chooser dialog can only be shown with a user activation" получилось с помощью небольшого хака с использованием setTimeout, в вашем случае это может выглядеть как-то так:
window.onload = function () {
    setTimeout(function () {
        document.getElementById('recorder').click();
    }, 0);
}


Часовой пояс GMT +3, время: 18:57.