C# ActiveX调用JS函数的便捷方法与思路

AcitecX虽然是一个古老而经典的应用技术,但在技术变革日新月异的今天仍然是那么的实用。缺了它又找不出更适合的技术来代替它。

这不,最近公司某产品的一个应用场景中,它又被我拉出来操练了一把。

接着难题来了,以前都是JS调用ActiveX中的函数,从没在ActiveX中调用过JS。

后来到google上一搜“c# activex 调用js”,找到了一个调用方法。

由于该方法,可通过我提供的关键字搜索获得,就不再详细描述。方法中的关键步骤如下:

1,声明 IOleClientSite 和 IOleContainer 两个接口。

2,通过一系列的转换,获得 IHTMLDocument 和 IHTMLWindow2 。

3,调用JS函数。

 

该方法是一个稳扎稳打的方法,值得大家学习。在理解了该方法后,我总结了一下其关键点就是获得IHTMLWindow2。

本人是一个懒惰虫,在了解其关键点后,将其方法做了精简,在此与大家分享。废话不多说,上代码。

思路:

1,通过JS将IHTMLWindow2直接传入,省去一大堆声明与转换代码。直接切入重点。

2,调用语法采用JS语法,方便书写与理解。

 

代码:

 js代码如下

<script type="text/javascript>
activexObj.SetFunc(window, "func");//activexObj为activex对象,"func"是JS函数名。通过参数传递函数名,可以令代码更加灵活。

function func(value) {
  alert(value);
}
</script>

 

 C#代码如下

注意:项目必须引用Microsoft.mshtml。

using mshtml;
public void SetFunc(object win, string func)
{
   IHTMLWindow2 htmlWin = win as IHTMLWindow2;
   if (htmlWin == null || string.IsNullOrEmpty(func))
   {
      MessageBox.Show("赋值错误。");
   }
   else 
   {
     //以下是调用方法,由于仅仅是示例,所以直接放在SetFunc方法中了。实际开发中,大家根据情况放到相应地方。
      //这里调用的方法我提供了两种:1,反射的方法;2,JS代码语法。
      //大家可以根据自己熟悉的情况采用适合自己的方法。两种方法的效果都是一样的。


      //方法1。
      htmlWin.GetType().InvokeMember(func,
         BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
         null, htmlWin, new object[] { "参数" });

     //方法2。
      string jsCode = string.Format("{0}('{1}')", func, "参数");
      htmlWin.execScript(jsCode, "jscript");


   }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值