C#拦截浏览按钮

时间:2012-02-23 12:49:45

标签: c# html webforms

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

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

我确实编写了一个自定义Windows表单来模仿网页表单,但他们已经将网页设置为在线并希望重复使用它。

如何截取浏览按钮?我可以在Web浏览器组件中使用C#应用程序,但可以拦截浏览按钮吗?

3 个答案:

答案 0 :(得分:1)

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

window.external.ShowPickerWindow();

您有两个选择:

  1. 在加载页面后查询页面的DOM,并将该按钮替换为触发选择器窗口的按钮。
  2. 让客户更改他们的页面,以便检查window.external.ShowPickerWindow方法的存在性,并基本上为您做选项(1)。
  3. 然后你可以有一个方法,可能叫window.external.GetPickedCode()来拉出页面中的代码。

答案 1 :(得分:1)

Rob kinder通过说“替换按钮”引导我走向正确的思考轨道,这使我找到了一个可以很好地运作的解决方案!

简而言之,我隐藏了浏览按钮,在其旁边插入一个新按钮,单击该按钮会打开一个带有文本框的新窗口。然后,此文本框在父表单中设置一个字符串值,该表单在onSubmit上用于附加文件。

    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太大了,无法在此处发布,但它基本上是手动构建要发布的内容处置

答案 2 :(得分:0)

不要显示实际的文件浏览器,模仿仅显示一个文件的文件。

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