#safari #mobile-safari #vaadin14
#сафари #мобильный-сафари #ваадин14
Вопрос:
У меня есть вопрос относительно executeJs
функции.
page.executeJs("$0.click();", downloadAnchor.getElement());
Эта строка кода не работает в реальном браузере iPhone Safari, хотя она работает в мобильном адаптивном режиме из настольного safari. Ценю вашу помощь в этом
Ответ №1:
Браузеры будут «подозрительно» относиться ко всему, что запускает загрузку, которая не является прямой реакцией на взаимодействие пользователя. Это делается в качестве меры предосторожности, так как начало загрузки файлов без явного согласия пользователя может быть опасным в определенных случаях. Разные браузеры и конфигурации имеют разные политики в отношении того, где именно проводить черту.
В вашем случае загрузка запускается не как прямое следствие взаимодействия с пользователем, а как прямое следствие получения сообщения с сервера. Такой шаблон просто не будет работать надежно, что бы вы ни делали.
Вместо этого вам нужно разработать взаимодействие таким образом, чтобы загрузка была инициирована непосредственно пользователем. Самый простой способ сделать это-заставить пользователя напрямую нажать на фактическую ссылку для загрузки. Если вы хотите иметь какое-то косвенное указание, то вам все равно нужно заставить действие работать непосредственно в браузере, не проходя через сервер.
Комментарии:
1. Спасибо Лейфу за информацию. Я проверю переработку пользовательского интерфейса
2. Мое требование заключается в том, что когда пользователь нажимает на кнопку, она формирует динамический потоковый ресурс (файл.xlsx), который будет загружен. В соответствии с текущим кодом добавляется привязка, и для нее устанавливается значение href с потоковым ресурсом, затем выполняется программный щелчок, чтобы файл был загружен. Как добиться этого без программного щелчка и не позволять пользователю дважды щелкнуть, Запросите вашу помощь в этом. Спасибо