当前位置:首页 > 行业动态 > 正文

activex js 交互

ActiveX可通过JavaScript进行交互,JS能调用其方法、访问属性,实现网页与ActiveX控件间的数据传递及功能配合。

ActiveX与JavaScript交互的详细解析

activex js 交互  第1张

ActiveX 是微软提出的一种技术标准,允许软件组件在网络环境中进行交互,它主要用于 Internet Explorer(IE)浏览器中,通过 JavaScript 实现与系统资源的交互操作,这种技术虽然强大,但由于安全性和兼容性问题,现代浏览器大多不再支持 ActiveX。

一、ActiveX与JavaScript交互的基本步骤

1、注册ActiveX控件:首先需要在系统中注册 ActiveX 控件,确保其在 IE 浏览器中正常工作,这通常通过运行regsvr32 命令来完成。

activex js 交互  第2张

2、在网页中嵌入ActiveX控件:使用 HTML 的<object> 标签将 ActiveX 控件嵌入到网页中。

   <object id="ctl1" classid="clsid:A2B80A6E-42FA-4730-AEB2-B1FB38D2C8D1" width="100" height="50"></object>

3、调用ActiveX控件的方法:在 JavaScript 中,可以通过getElementById() 方法获取 ActiveX 控件的对象引用,然后调用其方法。

   document.getElementById("ctl1").sayHello();

二、ActiveX与JavaScript传递参数和返回值

在 JavaScript 调用 ActiveX 控件方法时,可以传递各种类型的参数,并接收返回值,以下是几种常见的调用方式:

activex js 交互  第3张

1、整型变量作为参数和返回值

   long CActivexCtrl::Func(long i) { return 0; }

2、字符串变量作为参数和返回值

   BSTR CActivexCtrl::Func(LPCTSTR str) { CString strResult = "TeastString2 ret"; return strResult.AllocSysString(); }

3、VARIANT 类型作为参数和返回值

   VARIANT CActivexCtrl::Func(const VARIANT FAR& para1) { VARIANT vaResult; VariantInit(&vaResult); return vaResult; }

三、ActiveX异步调用JavaScript事件方法

在 MFC ActiveX 中,可以通过注册回调函数来实现异步调用 JavaScript 事件方法,以下是一个简单的示例:

1、在MFC ActiveX中注册回调函数

   // 回调函数测试
   #include <ATLBASE.H>
   extern CComModule _Module;
   #include <ATLCOM.h>
   // 回调函数--全局变量
   CComDispatchDriver m_Func1;
   // 注册回调函数
   void CActivexCtrl::regfun(LPDISPATCH bstrFun) { m_Func1 = bstrFun; }
   // 触发回调函数
   void CActivexCtrl::func_calljs() { VARIANT varArg[1]; varArg[0].vt = VT_UINT; varArg[0].uintVal = 10; m_Func1.InvokeN((DISPID)DISPID_VALUE, varArg, 1); }

2、在JavaScript中注册异步过程

   // 异步回调函数过程
   function callfun(i) { alert("callback function in js, ret=" + i); }
   // 注册回调函数
   obj.regfun(callfun);

四、ActiveX与JavaScript的实际应用案例

1、文件操作:使用 FileSystemObject 进行文件读写操作。

读取文件

     var fso = new ActiveXObject("Scripting.FileSystemObject");
     var file = fso.OpenTextFile("C:\path\to\your\file.txt", 1);
     var content = file.ReadAll();
     file.Close();
     console.log(content);

写入文件

     var fso = new ActiveXObject("Scripting.FileSystemObject");
     var file = fso.CreateTextFile("C:\path\to\your\file.txt", true);
     file.WriteLine("Hello, World!");
     file.Close();

2、执行系统命令:使用 WScript.Shell 对象来执行系统命令。

   var shell = new ActiveXObject("WScript.Shell");
   shell.Run("notepad.exe");

3、获取和设置环境变量:使用 WScript.Shell 对象获取和设置系统环境变量。

   var shell = new ActiveXObject("WScript.Shell");
   var env = shell.Environment("PROCESS");
   var path = env("PATH");
   console.log("Current PATH: " + path);
   env("MY_VARIABLE") = "MyValue";
   console.log("MY_VARIABLE: " + env("MY_VARIABLE"));

4、连接数据库:使用 ADODB.Connection 对象访问数据库。

   var connection = new ActiveXObject("ADODB.Connection");
   connection.Open("Provider=SQLOLEDB;Data Source=server_name;Initial Catalog=database_name;User ID=user;Password=password;");
   var recordset = new ActiveXObject("ADODB.Recordset");
   recordset.Open("SELECT * FROM table_name", connection);
   while (!recordset.EOF) { console.log(recordset.Fields(0).Value); recordset.MoveNext(); }
   recordset.Close();
   connection.Close();

五、ActiveX与JavaScript交互的安全性和兼容性考虑

由于 ActiveX 对象可以访问系统资源,因此它们可能会被反面代码利用,为了降低风险,建议仅在受信任的环境中使用 ActiveX 对象,并确保用户已知晓并同意其使用,ActiveX 对象仅在 Internet Explorer 中受支持,这意味着在现代浏览器(如 Chrome、Firefox、Edge 等)中无法使用,建议仅在需要与旧系统或特定应用程序交互时使用 ActiveX 对象。

六、ActiveX与JavaScript交互的替代方案

随着技术的发展,许多 ActiveX 对象的功能可以通过现代 Web API 和库来实现,文件操作可以使用 HTML5 File API,数据库访问可以使用 AJAX 或 Fetch API,这些现代技术提供了更安全、更高效的解决方案,并且不受浏览器兼容性问题的限制。

ActiveX与JavaScript之间的交互虽然强大,但考虑到其安全性和兼容性问题,开发者应谨慎使用,并在可能的情况下寻找现代技术的替代方案。

0