C# WebBrowser 执行自定义JS

最近在做一个项目,要用C#来自动提交一些网页表单,中间碰到了一个问题就是无法让WebBrowser执行自己定义的js, 有一些其他的DOM组件类似MSHTML,IEBrowser可以帮助实现,但是性格所致我还是尽量想不用太多的组件。 于是努力研究WebBrowser。

WebBrowser 有两个方法可以调用网页里面的js,但是那是网站的js,加入我想自己执行一串js代码好像都不行:

1. HtmlElement.InvokeMember, 只能执行一个HtmlElement对象的一个事件,比如click事件。

2. HtmlDocument.InvokeScript, 可以通过一个js的函数名称调用js,但是我们自己的js没有函数名称就算有函数名称也加载不进去WebBrowser里面。

怎么办?

后来在另外一个项目写js的时候意外发现了,javascript里面不是可以用eval来调用一段js代码吗,如果我们把eval当做函数名,利用上面的InvokeScript 不就可以搞定了:

 

View Code
 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 
11 namespace WindowsFormsApplication1
12 {
13     public partial class Form1 : Form
14     {
15         WebBrowser webBrowser1 = new WebBrowser();
16         public Form1()
17         {
18             InitializeComponent();
19             webBrowser1.Dock = DockStyle.Fill;
20             this.Controls.Add(webBrowser1);
21             webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
22         }
23 
24         private void Form1_Load(object sender, EventArgs e)
25         {
26             webBrowser1.Navigate("http://www.baidu.com/");
27             //MessageBox.Show(webBrowser1.Document.GetElementById("u").InnerHtml);
28         }
29 
30         private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
31         {
32             webBrowser1.Document.InvokeScript("eval", new object[] { "alert('FFFFFFFFFFFUUUUUUUUUUCCCCCCCCCCCCCC');"});
33         }
34     }
35 }

 

 

posted @ 2013-02-21 23:26  Pure Reno  阅读(2233)  评论(1编辑  收藏  举报