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 扫描枪使用(一)的更多相关文章

  1. Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)

    Ajax跨域问题及解决方案   目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...

  2. PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机

    在零售方面也有很好的应用.如在一些高端品牌零售店,营业员可以随身导购,一站式完成了商品销售和收银,很是受消费者追捧,符合了企业对客户体验以及行业领先的追求. PDA收银系统是一款多功能可以取代专业收银 ...

  3. C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据

    类文件: C#类文件 using System; using System.Collections.Generic; using System.Text; using System.Runtime.I ...

  4. 什么是智能扫描开单打印进销存POS?安卓工业手持PDA设备上的POS销售开单,现场打印打票,用扫描枪太方便了

    安卓PDA版POS销售开单如果和扫描枪配合使用,和超市的POS销售一样的操作 什么是智能扫描开单打印进销存POS? 互联网特性,让它在数据统计分析.客户关系管理等方面表现出众.智能POS,不仅是一个收 ...

  5. SilverLight 条码 扫描枪 MVVM(转载)

    目前做SL项目时,遇到条码的问题. 客户需要通过条码来加快工作效率以及减少错误.有条码,自然便引入扫描枪这个东西.不解释. 关键点是:扫描枪每次扫描完毕会触发回车 这是解决问题的关键! 现有两种情景: ...

  6. 【转】C#中判断扫描枪输入与键盘输入

    提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...

  7. 获取键盘输入或者USB扫描枪数据

    /// <summary> /// 获取键盘输入或者USB扫描枪数据 可以是没有焦点 应为使用的是全局钩子 /// USB扫描枪 是模拟键盘按下 /// 这里主要处理扫描枪的值,手动输入的 ...

  8. WinForm中TextBox 中判断扫描枪输入与键盘输入

    本文转载:http://www.cnblogs.com/Hdsome/archive/2011/10/28/2227712.html 提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBo ...

  9. web中使用扫描枪

    扫描枪实际上就是一输入设备,只不过它每次在输入的内容后面添加一个回车.因此在web中可以使用js监听回车事件.处理代码如下: jQuery(function() {        jQuery(doc ...

随机推荐

  1. 简单的RTSP消息交互过程

    C表示RTSP客户端,S表示RTSP服务端 第一步:查询服务器端可用方法 1. C->S:OPTION request       //询问S有哪些方法可用 2. S->C:OPTION ...

  2. git的使用及常用命令

    一,GIT是什么? git是目前世界上最先进的分布式版本控制系统 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在 ...

  3. HTML5 拖放(Drag 和 Drop)功能开发——浅谈dataTransfer对象

    [前言] 之前我已经为大家介绍过一篇有关HTML5中原生拖拽的相关知识了.今天为大家介绍HTML5拖拽中的其他一些关于dataTransfer对象的知识和应用. dataTransfer对象 之前的一 ...

  4. Layui的一点小理解(上)

    首先声明这是个人的一点理解,如有不对之处请指正,以下的例子有在官网上看到的,有的是自己写的.还是老规矩最后会附上官网的,如有不明白之处,请查看文档或留言. 既然说Layui,当然要简单的介绍以下什么是 ...

  5. hdu1711kmp

    Given two sequences of numbers : a11, a22, ...... , aNN, and b11, b22, ...... , bMM (1 <= M <= ...

  6. 最长递增子序列hdu1087

    #include<map> #include<set> #include<list> #include<cmath> #include<queue ...

  7. Debian 8 下安装持续集成的工具Jenkins

    前情提示:Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 第一种方法: 1.1 配置java环境变量    解压java到相应目录,我一般习惯把安装的软件 ...

  8. Android开发之旅:环境搭建及HelloWorld(转)

    本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始Andr ...

  9. tail命令

    tail命令用来取文件后几行,默认显示后10行.有多个FILE,每个都带有一个头文件名称. 语法: tail [OPTION]... [FILE]... 选项: -n#:取文件后#行,n可省略: -c ...

  10. 利用反射来实现获取成员的指定特性(Attribute)信息

    在开发过程中,我们经常需要自定义一些特性,来辅助我们完成对对象或者枚举进行管理.我们需要知道如何获取对象使用的特性信息. 以下举个学习用的例子. 我们自定义一个特性类,这个特性设置在一个数据段内是否执 ...