有一个独特的客户要求,我不确定如何处理。
客户有一个网页表单,其中包含用于选择文件的浏览按钮。单击浏览按钮时,他们不想显示本地文件,而是希望弹出一个带文本框的窗口以输入代码。然后,此代码用于从包含1000个文件的本地文件夹中选择文件,每个文件都有自己的代码。他们希望阻止用户查看该文件夹中的其他文件。
我确实编写了一个自定义Windows表单来模仿网页表单,但他们已经将网页设置为在线并希望重复使用它。
如何截取浏览按钮?我可以在Web浏览器组件中使用C#应用程序,但可以拦截浏览按钮吗?
答案 0 :(得分:1)
我能看到的唯一选择是使用带有Web浏览器组件的C#应用程序。然后,您可以使用WebBrowser.ObjectForScripting
提供一种方法,通过Javscript可以调用该方法来触发您的自定义选择器窗口,例如:
window.external.ShowPickerWindow();
您有两个选择:
window.external.ShowPickerWindow
方法的存在性,并基本上为您做选项(1)。然后你可以有一个方法,可能叫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)
不要显示实际的文件浏览器,模仿仅显示一个文件的文件。
或者,因为您在输入正确的代码时知道文件路径,请将文件复制到您创建的临时文件夹,然后打开文件浏览器浏览该文件夹,它将只包含该文件。