下载文件时显示自定义对话框
Posted
技术标签:
【中文标题】下载文件时显示自定义对话框【英文标题】:Display Custom Dialog When File Downloaded 【发布时间】:2012-10-04 14:33:46 【问题描述】:为我的问题寻找解决方案。我们正在为客户构建一个 Web 浏览器控件到产品中,他们需要能够检测网站上何时有文件上传框,然后它不需要启动 Windows 7 文件浏览器窗口,而是需要打开自己的定制设计一个
是否有浏览器事件允许我们捕获它?
【问题讨论】:
绕过对话框是恶意软件非常有吸引力的目标。您可以回退到 WebBrowser 的 COM 版本并获取 DWebBrowserEvents2.FileDownload 事件。但是,您无法找到正在下载的文件,您只能取消它。 问题的标题应该是“文件上传时显示自定义对话框”吗? 【参考方案1】:所以你想修改 <input type=file ....
的值你不能用 webbrowser 控制这样做,因为它访问 DOM 像 javascript、vbscript 和如果 DOM 允许访问和更改上传的文件,坏人很容易窃取你的本地文件(使用 javascript) 当您访问他们的网页时。
此外,由于该安全问题,您甚至看不到 FileUpload 的价值。
如果您想通过SendKeys
的组合以编程方式选择文件
【讨论】:
【参考方案2】:你可以hook up your own download manager只在你的浏览器控制主机进程中有效,方法是在控制站点中实现IServiceProvider,并在浏览器控制询问时实现QueryService返回一个IDownloadManager对象
在 Windows 窗体的 Webbrowser 类中,默认会为您创建一个控制站点,但您可以通过创建自己的 WebBrowserSiteBase 类并覆盖 WebBrowser.CreateWebBrowserSiteBase 方法来 override the control site。如果您使用 WPF、Silverlight 或 Windows Phone 中的 webbrowser 控件,则没有这样的可扩展性。
我建议您使用 C++ 编写下载管理器,因为如果您使用 C# 编码,则需要大量互操作。有一个使用原生下载管理器 here 的 C# webbrowser 控件示例。
【讨论】:
【参考方案3】:您可以捕获FileDownload
事件,并自行处理。
见http://msdn.microsoft.com/en-us/library/bb268220(v=vs.85).aspx
显示自定义文件对话框后,将数据发送回网络浏览器控件,然后提交表单。
另一种选择是将javascript注入控件。注入一个替换上传按钮调用的代码,并显示您自己的表单。
【讨论】:
以上是关于下载文件时显示自定义对话框的主要内容,如果未能解决你的问题,请参考以下文章