当前位置:编程学习 > JS >>

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代码如下

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

</script> 
 

 C#代码如下

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

[csharp]
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"); 
 
 
   } 



摘自 Sank Orange的专栏
补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,