码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 扫描枪使用(一)

时间:2017-03-07 11:41:23      阅读:2861      评论:0      收藏:0      [点我收藏+]

标签:put   方式   nload   eve   nbsp   文件中   相关   var   闭包   

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

//com.js

/**
 * 初始化MSComm1对象,并打开串口
 */
function initMSComm(){
	document.write("<OBJECT id=MSComm1 CLASSID=\"clsid:648A5600-2C6E-101B-82B6-000000000014\" codebase=\"MSCOMM32.OCX\" type=\"application/x-oleobject\"  style=\"width:100px;height:30px\" >");	
	document.write("<PARAM NAME=\"CommPort\"		VALUE=\"1\"/> ");
	document.write("<PARAM NAME=\"DataBits\"		VALUE=\"8\"/> ");
	document.write("<PARAM NAME=\"StopBits\"		VALUE=\"1\"/>");
	document.write("<PARAM NAME=\"BaudRate\"		VALUE=\"9600\"/>");
	document.write("<PARAM NAME=\"Settings\"		VALUE=\"9600,N,8,1\"/>");
	document.write("<PARAM NAME=\"RTSEnable\"		VALUE=\"1\"/>");
	document.write("<PARAM NAME=\"DTREnable\"		VALUE=\"1\"/>");
	document.write("<PARAM NAME=\"Handshaking\"		VALUE=\"0\"/>");
	document.write("<PARAM NAME=\"NullDiscard\"		VALUE=\"0\"/> ");
	document.write("<PARAM NAME=\"ParityReplace\"	VALUE=\"?\"/>");
	document.write("<PARAM NAME=\"EOFEnable\"		VALUE=\"0\"/>");
	document.write("<PARAM NAME=\"InputMode\"		VALUE=\"0\"/>");
	document.write("<PARAM NAME=\"InBufferSize\"	VALUE=\"1024\"/>");
	document.write("<PARAM NAME=\"InputLen\"		VALUE=\"1\"/>");
	document.write("<PARAM NAME=\"OutBufferSize\"	VALUE=\"512\"/>");
	document.write("<PARAM NAME=\"SThreshold\"		VALUE=\"0\"/>");
	document.write("<PARAM NAME=\"RThreshold\"		VALUE=\"1\"/>");
	document.write("</OBJECT>");
	
	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

<html>
<head>
<title>JavaScript串口测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<script type="text/javascript" src="com.js" >
</script>
<script   type="text/ecmascript"   for="MSComm1"  event="OnComm">
	// MSComm1控件每遇到 OnComm 事件就调用 MSComm1_OnComm()函数
	MSComm1_OnComm(mscommCallBack)
</script>
<script type="text/javascript">
	function mscommCallBack(scanValue) {
		var ewtm = document.getElementById("ewtm");
		ewtm.value = scanValue;
	}
</script>
</head>

<body>
<script type="text/javascript" >
	initMSComm();
</script>

二维条码:<input type="text" id="ewtm"/>
</body>
</html>



得出以上结果经过几次失败尝试,尝试内容如下:
1. 将test.html文件中的
   <script   type="text/javascript"   for="MSComm1"  event="OnComm">
// MSComm1控件每遇到 OnComm 事件就调用 MSComm1_OnComm()函数
MSComm1_OnComm(mscommCallBack)
   </script>段代码调整为:
   <script type="text/javascript">
        window.onload = function() {
             MSComm1.OnComm = MSComm1_OnComm;//采用其他方式取代闭包的实现过程
        }
   </script>

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不够熟练,所以没能够达到预期的目的,如果有更好的解决办法,希望大家能够给我留言。

相关文件下载:http://www.posunitech.cn/download_list/columnsId=60&FrontColumns_navigation01-1362972848243FirstColumnId=36&FrontColumns_navigation01-1362972848243SecondColumnId=60&&downloadcategoryid=1&isMode=false.html

JavaScript 扫描枪使用(一)

标签:put   方式   nload   eve   nbsp   文件中   相关   var   闭包   

原文地址:http://www.cnblogs.com/scienfun/p/6513797.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!