C#拦截浏览按钮

本文关键字:按钮 浏览 | 更新日期: 2023-09-27 18:25:37

有一个独特的客户请求,我不确定如何处理。

客户有一个带有浏览按钮的网页表单来选择文件。当单击浏览按钮时,他们希望弹出一个带有文本框的窗口来输入代码,而不是显示本地文件。然后,该代码用于从包含1000个文件的本地文件夹中选择一个文件,每个文件都有自己的代码。他们希望阻止用户查看该文件夹中的其他文件。

我确实写了一个自定义的Windows表单来模仿网页表单,但他们已经在线了网页,并希望重用它

你知道如何拦截浏览按钮吗?我可以将C#应用程序与web浏览器组件一起使用,但这会拦截浏览按钮吗?

C#拦截浏览按钮

我能看到的唯一工作选项是使用带有web浏览器组件的C#应用程序。然后,您可以使用WebBrowser.ObjectForScripting提供一个方法,可以通过Javscript调用该方法来触发您的自定义选择器窗口,例如:

window.external.ShowPickerWindow();

然后你有两个选择:

  1. 加载页面后,询问页面的DOM,并将按钮替换为触发picker窗口的按钮
  2. 让客户更改他们的页面,以便检查是否存在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太大了,不能在这里发布,但它基本上是手动构建要发布的内容处置

不要显示实际的文件浏览器,模仿一个在.中只显示那一个文件的浏览器

或者,由于您知道输入正确代码时的文件路径,请将文件复制到您创建的临时文件夹,然后打开文件浏览器浏览该文件夹,它将只包含该文件。