下载文件时显示自定义对话框

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注入控件。注入一个替换上传按钮调用的代码,并显示您自己的表单。

【讨论】:

以上是关于下载文件时显示自定义对话框的主要内容,如果未能解决你的问题,请参考以下文章

违反约束时显示自定义消息 PL/SQL

打开约会项目时显示自定义任务窗格(会议发生和个人会议)

仅在填充Wordpress时显示自定义字段

添加联系人时显示自定义同步适配器作为选项

Angular:ngFor数据项并在为空时显示自定义消息

UILabel 在使用文本设置属性时显示自定义字体错误,但在代码中设置时工作正常