Отображать пользовательский диалог при загрузке файла
Ищу решение моей проблемы. Мы встраиваем элемент управления веб-обозревателя в продукт для клиента, он должен уметь определять, когда на веб-сайте есть поле для выгрузки файлов, и вместо того, чтобы запускать окно обозревателя файлов 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 в элемент управления. Введите код, который заменяет вызов, с помощью кнопки загрузки, и вместо этого покажите собственную форму.