C#拦截浏览按钮
本文关键字:按钮 浏览 | 更新日期: 2023-09-27 18:25:37
有一个独特的客户请求,我不确定如何处理。
客户有一个带有浏览按钮的网页表单来选择文件。当单击浏览按钮时,他们希望弹出一个带有文本框的窗口来输入代码,而不是显示本地文件。然后,该代码用于从包含1000个文件的本地文件夹中选择一个文件,每个文件都有自己的代码。他们希望阻止用户查看该文件夹中的其他文件。
我确实写了一个自定义的Windows表单来模仿网页表单,但他们已经在线了网页,并希望重用它
你知道如何拦截浏览按钮吗?我可以将C#应用程序与web浏览器组件一起使用,但这会拦截浏览按钮吗?
我能看到的唯一工作选项是使用带有web浏览器组件的C#应用程序。然后,您可以使用WebBrowser.ObjectForScripting
提供一个方法,可以通过Javscript调用该方法来触发您的自定义选择器窗口,例如:
window.external.ShowPickerWindow();
然后你有两个选择:
- 加载页面后,询问页面的DOM,并将按钮替换为触发picker窗口的按钮
- 让客户更改他们的页面,以便检查是否存在
window.external.ShowPickerWindow
方法,并基本上为您执行选项(1)
然后,您可以有一个方法,可能称为window.external.GetPickedCode()
,在页面中提取代码。
Rob kinder通过说"替换按钮"引导我沿着正确的思路前进,这让我找到了一个效果很好的解决方案!
简言之,我隐藏了浏览按钮,在旁边插入一个新按钮,当单击该按钮时,会打开一个带有文本框的新窗口。然后,此文本框在父窗体中设置一个字符串值,该值在Submit中用于附加文件。
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement btnBrowse = wb.Document.GetElementById("fiPhoto");
if (btnBrowse != null)
{
HtmlElement newbtn = wb.Document.CreateElement("input");
newbtn.SetAttribute("id", "btnLoad");
newbtn.SetAttribute("type", "button");
newbtn.SetAttribute("value", "Load");
newbtn.Click += new HtmlElementEventHandler(newbtn_Click);
btnBrowse.Parent.AppendChild(newbtn);
btnBrowse.Style = "display:none";
}
HtmlElementCollection forms = wb.Document.Forms;
if (forms.Count > 0)
{
HtmlElement form = wb.Document.Forms[0];
form.AttachEventHandler("onsubmit", delegate(object o, EventArgs arg)
{
FormToMultipartPostData postData = new FormToMultipartPostData(wb, form);
postData.AddFile("photo", photo);
postData.Submit();
});
}
}
private void newbtn_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this);
frm.ShowDialog();
}
FormToMultipartPostData
太大了,不能在这里发布,但它基本上是手动构建要发布的内容处置
不要显示实际的文件浏览器,模仿一个在.中只显示那一个文件的浏览器
或者,由于您知道输入正确代码时的文件路径,请将文件复制到您创建的临时文件夹,然后打开文件浏览器浏览该文件夹,它将只包含该文件。