activex js 交互
- 行业动态
- 2025-02-15
- 2936
ActiveX与JavaScript交互的详细解析

ActiveX 是微软提出的一种技术标准,允许软件组件在网络环境中进行交互,它主要用于 Internet Explorer(IE)浏览器中,通过 JavaScript 实现与系统资源的交互操作,这种技术虽然强大,但由于安全性和兼容性问题,现代浏览器大多不再支持 ActiveX。
一、ActiveX与JavaScript交互的基本步骤
1、注册ActiveX控件:首先需要在系统中注册 ActiveX 控件,确保其在 IE 浏览器中正常工作,这通常通过运行regsvr32
命令来完成。

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 控件方法时,可以传递各种类型的参数,并接收返回值,以下是几种常见的调用方式:

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