程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# ActiveX調用JS函數的便捷方法與思路

C# ActiveX調用JS函數的便捷方法與思路

編輯:C#入門知識

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的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved