загрузка файла gwt

Я хотел бы вызвать нажатие кнопки обзора на скрытом виджете FileUpload. Следующий код отлично работает в IE 6+, но не работает в FireFox.

final FileUpload upload = new FileUpload(); 

upload.setVisible(false);
upload.setName("uploadFormElement"); 
panel.add(upload);

panel.add( new Button("Select File", new ClickListener()
{ public void onClick(Widget pSender) 
{ jsClickUpload( upload.getElement() ); } }));

native void jsClickUpload( Element pElement ) /*-{ pElement.click(); }-*/; 

Как я могу добиться того же в FireFox (и, возможно, в других браузерах)?


person Drejc    schedule 10.03.2009    source источник


Ответы (3)


Решение можно прочитать здесь:

http://www.quirksmode.org/dom/inputfile.html

в последнем абзаце:

Метод click() позволяет имитировать щелчок по полю формы. Флажки переключаются, выбираются радиостанции и т. д. К сожалению, Mozilla и Opera не добавили этот метод в поля загрузки файлов. Интересно, почему добавление этого на самом деле не представляет угрозы безопасности, поскольку худшее, что может случиться, — это всплывающее окно выбора файла.

person Drejc    schedule 11.03.2009
comment
всплывающее окно с файлом представляет собой модальное диалоговое окно, поэтому его можно использовать для рассылки спама и вызывать DoS-атаки на пользователя — представьте себе диалоговое окно, которое вы не можете закрыть! - person Chii; 14.03.2009
comment
Кроме того, вредоносный сценарий может вызвать диалоговое окно просмотра в тщательно выбранное время, чтобы заставить пользователя отправить файл не туда, куда он ожидал. Стоит также отметить, что это больше невозможно во флэш-памяти начиная с Flash 10. - person Mark Renouf; 11.04.2009

Вы пытались вызвать метод onClick() напрямую?

person Nick Josevski    schedule 10.03.2009
comment
Виджет FileUpload в GWT не имеет метода щелчка, поэтому для этого вам нужно использовать встроенный собственный javascript. - person Drejc; 11.03.2009

Метод щелчка в настоящее время находится в процессе реализации в FF 4. Обсуждается, какие правила безопасности будут реализованы, и похоже, что он будет похож на Window.open и должен быть прямым результатом действия пользователя, а не таймер или загрузка.

person LINEMAN78    schedule 05.10.2010