JavaScript 扫描枪应用(二)
针对扫描前的前一种实现略有所调整,感觉更接近实现的目标:
JavaScript 代码如下:
// JavaScript Documentfunction createMSComm(div, callBackFunction) {var mscomm_str = "<OBJECT id=MSComm1 CLASSID='clsid:648A5600-2C6E-101B-82B6-000000000014' codebase='MSCOMM32.OCX' type='application/x-oleobject' style='width:100px;height:30px' >"+"<PARAM NAME='CommPort'VALUE='1'/> "+"<PARAM NAME='DataBits'VALUE='8'/> "+"<PARAM NAME='StopBits'VALUE='1'/>"+"<PARAM NAME='BaudRate'VALUE='9600'/>"+"<PARAM NAME='Settings'VALUE='9600,N,8,1'/>"+"<PARAM NAME='RTSEnable'VALUE='1'/>"+"<PARAM NAME='DTREnable'VALUE='1'/>"+"<PARAM NAME='Handshaking'VALUE='0'/>"+"<PARAM NAME='NullDiscard'VALUE='0'/> "+"<PARAM NAME='ParityReplace'VALUE='?'/>"+"<PARAM NAME='EOFEnable'VALUE='0'/>"+"<PARAM NAME='InputMode'VALUE='0'/>"+"<PARAM NAME='InBufferSize'VALUE='1024'/>"+"<PARAM NAME='InputLen'VALUE='1'/>"+"<PARAM NAME='OutBufferSize'VALUE='512'/>"+"<PARAM NAME='SThreshold'VALUE='0'/>"+"<PARAM NAME='RThreshold'VALUE='1'/>"+"</OBJECT>";// 将OBJECT标签添加到层中div.innerHTML = mscomm_str;// 打开串口if(MSComm1.PortOpen==false){try{MSComm1.PortOpen=true;}catch(ex){alert("com1端口打开失败:"+ex.message);}}// 串口接收内容var mscomm_scan_value = "";// 串口响应事件mscomm.attachEvent("OnComm",function() {switch(this.CommEvent){case 2: //接收事件if(mscomm_scan_value == "") {mscomm_scan_value = this.Input;// 定时读取缓存信息setTimeout("getMSCommScanValue()",300);}break;default: alert("Event Raised!"+MSComm1.CommEvent);}});// 读取缓存中剩余信息function getMSCommScanValue(){// 读取缓存中剩余的信息while(MSComm1.inBufferCount > 0) {mscomm_scan_value += MSComm1.Input;}// 执行页面传递过来的函数callBackFunction(mscomm_scan_value);// 清空当前读取信息mscomm_scan_value = ""}}
<html><head><title>JavaScript串口测试</title><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /><script type="text/javascript" src="mscomm.js" ></script><script type="text/javascript">var i = 0;function mscommCallBack(scanValue) {var ewtm = document.getElementById("ewtm");ewtm.innerHTML += "第" + (++i) + "次扫描:" + scanValue;}window.onload = function() {var mscomm_div = document.getElementById("mscomm_div");createMSComm(mscomm_div, mscommCallBack);}</script></head><body>二维条码:<div id="ewtm"></div><div id="mscomm_div"></div></body></html>