C# ActiveX调用JS函数

来源:互联网 发布:帝王三国单机无需网络 编辑:程序博客网 时间:2024/05/17 08:14

参考文档:http://blog.csdn.net/cds27/article/details/7533479

C# 在winform里调用WebBrowser控件里的脚本:

IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.DomDocument;

IHTMLWindow2 win = (IHTMLWindow2)doc.parentWindow;

win.execScript("vote(10068)", "javascript");

需要增加引用

在项目里,添加引用,找到 。NET下的 Microsoft.mshtml再在程序页面上面加入using mshtml;

JScript是建立在COM之上的,设置变量/调用函数是通过IDispatch来实现的。在.NET里,调用IDispatch里的方法是通过反射来实现的,即,通过System.Type.InvokeMember 。该方法调用 IDispatch::GetIDsOfNames 以及IDispatch::Invoke来调用COM Automation 对象里的方法和属性。参考

Binding for Office automation servers with Visual C# .NET

假如有下列HTML,

<script language="javascript">
var var1 = 'yes';
function testx(obj)
{
alert(obj);
alert(var1);
}
</script>
<input type=button value="click me" onclick="testx('hello');">

在C#里,假设axWebBrowser1是你的WebBrowser控件对象,你已经装载了上述HTML,你可以这么做,

mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)axWebBrowser1.Document;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc.parentWindow;

//读变量值
object o = win.GetType().InvokeMember ("var1", BindingFlags.GetProperty, null, win, new Object [] {});

//写变量值
win.GetType().InvokeMember ("var1", BindingFlags.SetProperty, null, win, new Object [] {"新的值"});

//调用方法
win.GetType().InvokeMember("testx",BindingFlags.InvokeMethod,null,win,new object[]{1});

比较麻烦,对么?幸运的是,我们不用这么麻烦,因为IHTMLWindow2里有个现成方法,execScript,我们可以这么做:

win.execScript("var1 = 'abc';","javascript");
win.execScript("testx(12)","javascript");

1

转:http://hi.baidu.com/ch188838820/item/2426f00f4d444017addc70e3



原创粉丝点击