当前位置: 首页 > 互联网 > 正文

ActiveX初识

作为一个程序员,不可否认,在N久之前就听过ActiveX的大名,也略知在浏览器打开某些网站时会叫我们加载或运行一些控件,这些控件也可称之为ActiveX控件。ActiveX控件完成了浏览器无法完成的某些功能,比如,某些控件能访问网页打开者电脑的系统信息,能打开或访问一些特殊格式的文件(打开doc,xls,这也是微软开发ActiveX组件的初衷),还有一些其他自定义的组件,这些组件就比较的灵活,在某些程度上这些组件就像是一个客户端,能完成一系列组件定义的功能。很多银行购物网站就会要求下载一些安全控件,在密码验证,介质识别中提供安全保证,用的也是这类技术吧。

去了解ActiveX偶然的原因是领导叫我找下网页中识别客户端是否安装了打印机。本能的反应就是网页本身的js或vbs代码与脚本,结合浏览器的安全机制,是不允许网页代码访问关于客户端的系统环境信息。比如:CPU,当前进程,本地IP,打印机,硬盘等等。因此,就往ActiveX控件上进行考虑。最初发现VBS代码可直接在本地运行,通过加载各种组件,很方便的就可以查找出本地的打印机信息。但将这些脚本插入到网页中却又碰到了难题,不是对象不能创建,就是语法错误。一脸困惑。

后来,在网上搜索了一下,ActiveX与网页交互,才进一步了解了自定义组件是如何开发,部属到网上的,为什么要向微软购买组件签名,为什么没有浏览器要降低安全等级,及vb,c++,.NET开发出来的组件有什么不同与区别。ActiveX组件基本上只用于IE浏览器,如果是其它浏览器如Chrome,FireFox等,可能需要其它额外的开发,才能下载并在网页上使用对应的ActiveX组件。

又去看了一些JavaScript实现Windows任务管理器等的例子,加上更熟悉Js,因此就写了一个显示客户端打印机的网页代码,代码也很简单,如下:

[html]<HTML>
<HEAD>
<TITLE>WMI Scripting HTML</TITLE>
</HEAD>
<BODY>
<script language="JScript">
function foreach(object, fn){
var i = 0;
for(var e = new Enumerator(object);!e.atEnd();e.moveNext()){
fn(i++, e.item());
}
}

var WshNetwork = new ActiveXObject("WScript.Network");
document.write("Domain = " + WshNetwork.UserDomain+"<br/>");
document.write("Computer Name = " + WshNetwork.ComputerName+"<br/>");
document.write("User Name = " + WshNetwork.UserName+"<br/>");

var wmi = new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer(WshNetwork.ComputerName, "/root/CIMV2");
var colItems = wmi.ExecQuery("SELECT * FROM Win32_Printer");
document.write("<br>");
document.write("——————————–");
document.write("<br>");
document.write("Your Printers:");
document.write("<br>");
foreach(colItems, function(i, objItem){
document.write("<br>");
document.write(objItem.Name);
});
</script>
</BODY>
</HTML>[/html]

部署在服务器之后,网页提示需要允许运行ActiveX控件,同意确定之后,还是无法正确显示,打开网页错误详细信息:“Automation服务器不能创建对象”,网上搜寻了一下,是浏览器的安全设置问题。又将Internet属性->安全->自定义级别中的设置,启用“对没有标记为安全的activex控件进行初始化和脚本运行”。再次打开页面后,结果显示了当前电脑连接的打印机,显示正确。

领导自然否决了这个方案,因为存在安全风险太大了。但通过这次这个问题的探究,我也初步了解了ActiveX组件开发目的,开发工具,及所影响到的关于安全方面的考量。当年微软也是通过这项策略(IE均提供直接打开ActiveX-Documents(如.doc.ppt…等扩展名)之文档),将Netscape完全逐出市场。如今IE虽没有过去那么强势,但这项技术在企业级应用,及网页安全方面还是有很大的现实意义。

本文固定链接: http://www.byhard.com/?p=1097 | 海纳百川

该日志由 byhard 于2014年01月14日发表在 互联网 分类下,
原创文章转载请注明: ActiveX初识 | 海纳百川
关键字:

报歉!评论已关闭.