海康威视BS模式发卡器(DS-K1F100-D8E)
通常情况下都是CS模式连接读写器实现读卡写卡等操作,由于bs模式如按照正常模式连接读写器会导致连接失败,一般情况下服务器是无法调用本地读写器或发卡器,此代码则实现了bs模式下HTML当前页可以连接本地读写器,通过这种方式实现,但是仅限于IE浏览器下。其它浏览器不兼容,大家可以自己测试。
- 发卡器关联classid加载
<object id="readcard" classid="clsid:A233ADFA-773C-4EEC-B210-D0959EE7C3A7" style="width: 0;height: 0;"></object>
- 需要调用时触发的事件,此处我是页面加载时调用发卡器,所以初始化直接执行
$(document).ready(function() {
var isBound = '${temporaryCard.isBound}';
if(isBound == 1){
return false;
}
var temporaryCard = '${temporaryCard}';
var inited = false;
try{
if(!inited){
readcard.InitializeCardReader('<?xml version="1.0"?><PARAMS><READERTYPE>6</READERTYPE><CMCTYPE>0</CMCTYPE><SERIALPORT>1</SERIALPORT > <RATE>19200</RATE><TIMEOUT>200</TIMEOUT><BEEP>undefined</BEEP><CARDTYPE>0</CARDTYPE><CARDNOTYPE>0</CARDNOTYPE></PARAMS>');
inited = true;
}
var str = $('#cardNumberInput').val();
if(str == 'undefined' || !str || !/[^\s]/.test(str)){
readcard.StartAutomaticallyMode();
readcard.SetCbCardSeriaNo(function(a) {
if(a!=undefined&&a!=null&&a!=''){
$('#cardNum').val(a);
readcard.StopAutomaticallyMode();
}
})
}
}catch(e){
inited = false;
jp.error("请下载读卡器控件并以管理员身份运行IE浏览器使用读卡器"+'<a href="${ctxStatic}/software/OcxCardSetup.exe">下载控件</a>');
console.error(e);
}
})
jp可以直接换成layer,也可以自定义框架
$(’#cardNum’).val(a);
a为发卡器获取到的卡号,其它就不截图了,这个百分之百IE浏览器完全可以正常运行