实用主义

把.Net用好用足

导航

事件触发型ActiveX放置在网页中的部分思考

最近一B/S项目中频繁用到指纹扫描登记及比对功能。指纹相关功能早已成熟,相关硬件厂家也把扫描、比对等功能做成了ActiveX控件,要置入B/S系统中,也只要使用其提供的ActiveX控件就可以了。

我使用的是中控URU4000B,其提供了一ActiveX控件,biokey.ocx。这个控件有个特点,其功能实现是事件触发型的,如:在指纹登记时,先调用一个函数进入登记状态,之后如果有合格指纹按压动作,就会触发一个事件,告之指纹登记已经完成。且如果在一个窗口内有多个控件,只有其中一个控件实例会收到这个事件。

但实际的功能要求在一个页面内有多个人的指纹登记及比对,比如登记了产权人的还要登记共有人的。有些功能界面情况还是有Iframe,在Iframe里有指纹登记的,在Iframe容器外也要指纹登记。如果直接在页面内放置多个Object对象,或在每个页面里都放置一个Object对象,则按压指纹触发的事件完全不知道会反应到哪个页面的哪个控件上。因此实现上要求只能整个窗口内只有一个Object,这样可以确保当前事件都反馈到确定的控件及处理脚本上。

 

可以采取的思路是,使用一段javascript脚本向页面内注册Object元素及事件处理脚本,这段脚本中找到最上层的window对象,然后在这个window对象的Document里加入Object元素及事件处理脚本。各页面在调用功能的时候,相应地把自己所在的window对象及控件ID赋值给顶层window的变量中(如window.targetWin),方便在事件处理中通过顶层window.targetWin来访问实际调用功能的控件。

posted on 2009-11-18 16:38  Render  阅读(757)  评论(0编辑  收藏  举报