2

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

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

4

3 回答 3

5

您可以通过在控制站点中实现 IServiceProvider来连接您自己的下载管理器,该下载管理器仅在您的 webbrowser 控件主机进程中有效,并在 webbrowser 控件询问时实现 QueryService 以返回一个 IDownloadManager 对象

在 Windows 窗体的 Webbrowser 类中,默认会为您创建一个控制站点,但您可以通过创建自己的WebBrowserSiteBase类并覆盖 WebBrowser.CreateWebBrowserSiteBase 方法来覆盖控制站点。如果您使用 WPF、Silverlight 或 Windows Phone 中的 webbrowser 控件,则没有这样的可扩展性。

我建议你用 C++ 编写下载管理器,因为如果你用 C# 编码,则需要大量的互操作。这里有一个使用本机下载管理器的 C# webbrowser 控件的示例。

于 2012-10-14T21:13:01.007 回答
0

因此,您想修改<input type=file ....You cannot do that with webbrowser control 的值,因为它访问 DOM 之类的 javascript、vbscript 与如果 DOM 允许访问和更改上传的文件,当您访问时,坏人很容易窃取您的本地文件(使用 javascript)他们的页面。
此外,由于该安全问题,您甚至看不到 FileUpload 的价值。
如果您想以编程方式选择一个文件,可以通过以下方式组合SendKeys

于 2012-10-14T21:38:12.963 回答
0

您可以捕获FileDownload事件并自己处理。

请参阅http://msdn.microsoft.com/en-us/library/bb268220(v=vs.85).aspx

显示自定义文件对话框后,将数据发送回 webbrowser 控件,然后提交表单。


另一种选择是将javascript注入控件。注入一个替换上传按钮调用的代码,并显示您自己的表单。

于 2012-10-14T11:29:10.180 回答