【问题标题】:Display Custom Dialog When File Downloaded下载文件时显示自定义对话框
【发布时间】:2012-10-04 14:33:46
【问题描述】:

为我的问题寻找解决方案。我们正在为客户构建一个 Web 浏览器控件到产品中,他们需要能够检测网站上何时有文件上传框,然后它不需要启动 Windows 7 文件浏览器窗口,而是需要打开自己的定制设计一个

是否有浏览器事件允许我们捕获它?

【问题讨论】:

  • 绕过对话框是恶意软件非常有吸引力的目标。您可以回退到 WebBrowser 的 COM 版本并获取 DWebBrowserEvents2.FileDownload 事件。但是,您无法找到正在下载的文件,您只能取消它。
  • 问题的标题应该是“文件上传时显示自定义对话框”吗?

标签: c# browser webbrowser-control


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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 2021-08-20
        相关资源
        最近更新 更多