js怎么获取扫码枪条码_JavaScript 扫描枪使用(一)

本文介绍了如何在JavaScript中使用MSComm1对象初始化串口并处理扫描枪的条码读取事件。通过`initMSComm`函数打开串口,`MSComm1_OnComm`函数处理接收事件,`getMSCommScanValue`函数读取缓存信息。在测试过程中,作者尝试了不同方法来绑定事件和处理接收结束,最后通过定时器实现了缓存信息的正确读取。
摘要由CSDN通过智能技术生成

JavaScript 扫描枪应用(一)

com.js为主要的代码实现,test.html文件为测试的页面,其中包括了com.js文件中方法的调用。以下为测试成功代码:

com.js

//com.js

/**

* 初始化MSComm1对象,并打开串口

*/

function initMSComm(){

document.write("");

document.write(" ");

document.write(" ");

document.write("");

document.write("");

document.write("");

document.write("");

document.write("");

document.write("");

document.write(" ");

document.write("");

document.write("");

document.write("");

document.write("");

document.write("");

document.write("");

document.write("");

document.write("");

document.write("");

if(MSComm1.PortOpen==false){

try{

MSComm1.PortOpen=true;

}catch(ex){

alert("com1端口打开失败:"+ex.message);

}

}

}

var mscomm_scan_value = "";

// 串口响应事件

function MSComm1_OnComm(callBackFunction){

switch(MSComm1.CommEvent){

case 2: //接收事件

if(mscomm_scan_value == "") {

mscomm_scan_value = MSComm1.Input;

// 定时读取缓存信息

setTimeout("getMSCommScanValue("+callBackFunction+")",300);

}

break;

default: alert("Event Raised!"+MSComm1.CommEvent);

}

}

function getMSCommScanValue(callBackFunction){

// 读取缓存中剩余的信息

while(MSComm1.InBufferSize > 0) {

mscomm_scan_value += MSComm1.Input;

}

// 执行页面传递过来的函数

callBackFunction(mscomm_scan_value);

// 清空当前读取信息

mscomm_scan_value = ""

}

test.html

JavaScript串口测试

// MSComm1控件每遇到 OnComm 事件就调用 MSComm1_OnComm()函数

MSComm1_OnComm(mscommCallBack)

function mscommCallBack(scanValue) {

var ewtm = document.getElementById("ewtm");

ewtm.value = scanValue;

}

initMSComm();

二维条码:

得出以上结果经过几次失败尝试,尝试内容如下:

1. 将test.html文件中的

// MSComm1控件每遇到 OnComm 事件就调用 MSComm1_OnComm()函数

MSComm1_OnComm(mscommCallBack)

段代码调整为:

window.onload = function() {

MSComm1.OnComm = MSComm1_OnComm;//采用其他方式取代闭包的实现过程

}

2. 在页面head的JavaScript代码中调用initMSComm方法,将Object标签对象添加到页面的一个div中,页面提示加载ActiveX控件,但是无法绑定OnComm事件响应。

3. 当MSComm1.CommEvent为7时表示接收结束,可是只能接收到状态为2的情况,所以无法采用状态为7时的响应事件。

4. 当initMSComm方法调用时,且MSComm1.CommEvent为2的情况下,判断MSComm1.inBufferCount为0时进行事件响应,可能是缓冲等多种原因(具体不太清楚),会导致inBufferCount出现多吃0的情况,所以没有办法使用,最终采用首次执行,定时获取的方式完成缓存内容的读取操作。

我的目的是通过一次方法调用,能够实现对象的加载,响应事件的绑定,以及接收结束执行响应事件操作。由于我对JavaScript不够熟练,所以没能够达到预期的目的,如果有更好的解决办法,希望大家能够给我留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值