web方式检测客户端是否安装打印组件程序
时间:2007-11-02 来源:Jedliu
【关键字】web javascript js 检测 打印组件 客户端 程序 是否安装
【前文】这段时间在b/s系统中应用时,需要在web方式检测客户端是否安装了打印组件。打印组件是通过url protocol 的方式实现的,也就是说在web方式访问特定的url时将调用安装的打印组件来进行处理。但是如果一旦打印组件没有安装,一旦客户点击了特定的url时,显示的是无法显示页面,在客户端交互上的效果不好,所以需要在用户点击特定的url时首先检测客户端是否安装了打印组件,然后再进行跳转。查阅了相关的资料,也没有找到什么好的方法,不过还是有些体会。成文如下。
【正文】
1、通过建立wshell对象,然后来访问注册表或者文件来进行测试,这种方案倒是可行。但是每次使用这个对象的时候,浏览器都会提示“不安全的activeX交互”,只有用户点击确认才可以执行相关操作。这个方式存在的问题:
首先、这样的提示基本上是不可以忍受的。
其次、这样的提示仅仅在用户在浏览器中设置了可以运行不安全的脚本时,才可以关闭,但是这对于客户端来说是无法接受的。
2、通过在安装程序的时候一并安装一个activeX组件,这个组件不进行什么实体的功能操作,仅仅作为一个检测标志即可。这个方式存在的问题:
首先、如何能够制作一个可以安装的activeX组件。这个我查找资料,很少相关信息。
其次、就算可以制作一个可以安装的activeX组件,如何能够使用户设置为安全的组件也是一个问题。如果默认安装的这个组件不可以访问,那又是白搭。
3、第2中方案的一个折中实现:我查阅相关资料,做了不少次尝试之后发现,可以在注册表中写入相应的键值,用于指向原有的某些系统级的安全的class对象。这样的操作相当于对这个对象建立了一个映射,创建这个对象的时候其实就是创建系统中原有的对象,这样可以保证浏览器对于这个控件的检测放行。找了不少系统原有的CLSID之后,发现windows media player这个控件,可以实现这个方案。
具体的实现方案就是:在安装程序的时候建立一个对于WMP的CLSID的映射,然后通过javascript来新建这个activeX对象,对于这个映射的检测便完成了对于这个程序存在的检测。
具体实现的实例,可以参考上传的压缩文件。
这个方案的问题在于:
首先、创建activeX来检测的方式在非IE浏览器中不受支持。
其次、一旦客户端禁止了wmp控件,则无法执行检测。不过在IE6中没有简易的办法禁止,其他情况下用户也不会禁止这个控件。
4、通过Cookie的方式。我又查找了一些检测的方式,发现有些程序是通过cookie的方式进行检测。在安装程序的时候通过某种方式设置用户的cookie,然后用户在web中进行操作的时候通过javascript的方式来检测这个cookie的存在来完成对于程序的检测。javascript操作cookie的方式倒是安全的,但是安装程序执行时完成对于cookie的操作的某种方式,没有找到相关的信息。如果客户端禁止了cookie或者随时清理cookie,这种方案也是无效的。
5、综上,还没有一种比较好的方式来实现通过web的方式来检测客户端是否安装了某个程序。我现在采用的是第3中方案,基本上可以满足使用。
|
相关阅读 更多 +