Отображать пользовательский диалог при загрузке файла

Ищу решение моей проблемы. Мы встраиваем элемент управления веб-обозревателя в продукт для клиента, он должен уметь определять, когда на веб-сайте есть поле для выгрузки файлов, и вместо того, чтобы запускать окно обозревателя файлов Windows 7, ему нужно открывать свои собственные индивидуальный дизайн

Есть ли в браузере событие, которое позволяет нам это зафиксировать?

3 ответа

Вы можете подключить свой собственный менеджер загрузок, который эффективен только в вашем хост-процессе элемента управления веб-браузера, реализовав IServiceProvider на сайте элемента управления и внедрив QueryService для возврата объекта IDownloadManager по запросу элемента управления веб-браузера

В классе Webbrowser формы Windows по умолчанию для вас создается сайт управления, но вы можете переопределить сайт управления, создав собственный класс WebBrowserSiteBase и переопределив метод WebBrowser.CreateWebBrowserSiteBase. Такой расширяемости нет, если вы используете веб-браузер из WPF, Silverlight или Windows Phone.

Я предлагаю вам написать менеджер загрузок на C++ из-за количества взаимодействия, необходимого для написания кода на C#. Здесь приведен пример элемента управления веб-браузера C# с использованием встроенного менеджера загрузки.

Итак, вы хотите изменить значение <input type=file .... Вы не можете сделать это с помощью элемента управления webbrowser, потому что он обращается к DOM, как javascript, vbscript и наоборот. И если DOM разрешает доступ и изменение загруженного файла, злоумышленники могут легко украсть ваши локальные файлы (используя javascript), когда вы посещаете их страницы.
Более того, вы даже не видите значение FileUpload из-за этой проблемы безопасности.
Если вы хотите выбрать файл программно, это возможно с помощью комбинации SendKeys

Вы можете поймать FileDownload событие, и справиться с этим самостоятельно.

См. http://msdn.microsoft.com/en-us/library/bb268220(v=vs.85).aspx

После отображения диалогового окна пользовательского файла отправьте данные обратно в элемент управления веб-браузера и отправьте форму.


Другой вариант - добавить JavaScript в элемент управления. Введите код, который заменяет вызов, с помощью кнопки загрузки, и вместо этого покажите собственную форму.

Другие вопросы по тегам