C#Webbrowser文档,invokemember(“click”),是否可以等到单击操作解决?

时间:2011-06-08 02:13:04

标签: c# javascript dom webbrowser-control

我发生的是一个Invokemember(“点击”),问题是我希望能够获取生成的innerhtml。问题是我不确定如何/如果可以等到invokemember的结果动作(“click”)得到解决。这意味着,在执行此单击时,在javascript中将显示列出的下20个项目。但是,我不确定如何判断javascript何时将被完全加载。以下是我正在使用的内容。

private void button1_Click(object sender, EventArgs e)
{
    HtmlElement button = webBrowser1.Document.GetElementById("ctl08_ctl00_InventoryListDisplayFieldRepeater2_ctl00_BlockViewPaging_Next");
    button.InvokeMember("click");
    HtmlElement document = webBrowser1.Document.GetElementsByTagName("html")[0];


}

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是在javascript中修改“click”事件处理程序,以便在退出方法之前(在完成所有工作之后)更改某些隐藏输入字段的值。您可以附加到C#代码更改字段的事件,并在触发时执行操作。

// Your init method - you can call it after `InitializeComponent`
// in the constructor of your form
Init() {
    webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
    webBrowser1.Document.GetElementsByTagName("statusField")[0].AttachEventHandler("onchange", WorkDone);
}

void WorkDone(object sender, EventArgs e) {
    HtmlElement document = webBrowser1.Document.GetElementsByTagName("html")[0];
}

这是原始解决方案,我还没有检查"onchange"是否是正确的DOM事件。

此外,您无法在文档完全加载之前附加到DOM事件,这就是我将附加逻辑放在DocumentCompleted事件处理程序中的原因。