如何从C#WebBrowser执行Javascript函数?

时间:2009-05-20 14:37:10

标签: c# javascript ajax

我正在通过C#和WebBrowser进行一些Web自动化。有一个我需要“点击”的链接,但由于它触发了一个Javascript函数,显然需要执行代码而不是单击该元素(即element.InvokeMember(“click”))。这是元素的href,它打开一个Ajax表单:

javascript:__doPostBack("ctl00$cphMain$lnkNameserverUpdate", "")

我试过了:

webBrowser1.Document.InvokeScript("javascript:__doPostBack", new object[] { "ctl00$cphMain$lnkNameserverUpdate", "" });

webBrowser1.Document.InvokeScript("__doPostBack", new object[] { "ctl00$cphMain$lnkNameserverUpdate", "" });

以及其他一些事情。代码被命中,但脚本不会被触发。任何想法都会受到最高的赞赏。

格雷格

BTW这是完整的元素,以防它有用:

<a href="javascript:__doPostBack('ctl00$cphMain$lnkNameserverUpdate','')" onmouseout="window.status=''; return true" onmouseover="window.status='Update Nameservers'; return true" id="ctl00_cphMain_lnkNameserverUpdate" onclick="javascript:Layout.ChangeIframeToSrc('DropinLoad_Domain.aspx?controlRequest=ActionNameserversWithIP');return false;">NS51.DOMAINCONTROL.COM<br/>NS52.DOMAINCONTROL.COM<br/></a>

2 个答案:

答案 0 :(得分:0)

看一下这个链接:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx

我过去实际上已经使用过它了,它完美无缺。

答案 1 :(得分:0)

HtmlDocument doc = browser.Document;
HtmlElement head = doc.GetElementsByTagName("head")[0];
HtmlElement s = doc.CreateElement("script");
s.SetAttribute("text","function sayhello() { alert('hello'); }");
head.AppendChild(s);
browser.Document.InvokeScript("sayHello");