JavaScript 扫描枪使用(一)
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不够熟练,所以没能够达到预期的目的,如果有更好的解决办法,希望大家能够给我留言。
JavaScript 扫描枪使用(一)的更多相关文章
- 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 ...
- PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机
在零售方面也有很好的应用.如在一些高端品牌零售店,营业员可以随身导购,一站式完成了商品销售和收银,很是受消费者追捧,符合了企业对客户体验以及行业领先的追求. PDA收银系统是一款多功能可以取代专业收银 ...
- C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据
类文件: C#类文件 using System; using System.Collections.Generic; using System.Text; using System.Runtime.I ...
- 什么是智能扫描开单打印进销存POS?安卓工业手持PDA设备上的POS销售开单,现场打印打票,用扫描枪太方便了
安卓PDA版POS销售开单如果和扫描枪配合使用,和超市的POS销售一样的操作 什么是智能扫描开单打印进销存POS? 互联网特性,让它在数据统计分析.客户关系管理等方面表现出众.智能POS,不仅是一个收 ...
- SilverLight 条码 扫描枪 MVVM(转载)
目前做SL项目时,遇到条码的问题. 客户需要通过条码来加快工作效率以及减少错误.有条码,自然便引入扫描枪这个东西.不解释. 关键点是:扫描枪每次扫描完毕会触发回车 这是解决问题的关键! 现有两种情景: ...
- 【转】C#中判断扫描枪输入与键盘输入
提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...
- 获取键盘输入或者USB扫描枪数据
/// <summary> /// 获取键盘输入或者USB扫描枪数据 可以是没有焦点 应为使用的是全局钩子 /// USB扫描枪 是模拟键盘按下 /// 这里主要处理扫描枪的值,手动输入的 ...
- WinForm中TextBox 中判断扫描枪输入与键盘输入
本文转载:http://www.cnblogs.com/Hdsome/archive/2011/10/28/2227712.html 提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBo ...
- web中使用扫描枪
扫描枪实际上就是一输入设备,只不过它每次在输入的内容后面添加一个回车.因此在web中可以使用js监听回车事件.处理代码如下: jQuery(function() { jQuery(doc ...
随机推荐
- EF的DbSet属性的Where查询,注意事项
#1 Func<T,bool>与 Expression<Func<T,bool>>的区别 Func<T,bool>本身就是一个委托(delegate), ...
- Unity CommandInvokationFailure: Failed to re-package resources. 解决方案
在导入谷歌的SDK的时候,打包出来报错CommandInvokationFailure: Failed to re-package resources. 把Android SDK更新一下就轻松搞定了, ...
- 探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
前言 首先说明这并不是一个教程贴,而记事本应用是网上早有的案例,对于学习 vuex 非常有帮助.我的目的是探索 vuex 2.0 ,然后使用 vue 2.0 + vuex 2.0 重写这个应用,其中最 ...
- 篇5 python自动化测试应用-Selenium环境篇
篇5 python自动化测试应用-Selenium环境篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),从本篇开始我将开始 ...
- [uva11992]Fast Matrix Operations(多延迟标记,二维线段树,区间更新)
题目链接:https://vjudge.net/problem/UVA-11992 题意:n*m的矩阵,每次对一个子矩阵操作,有三种操作:加x,设置为x,查询.查询返回子矩阵和.最小值.最大值 n很小 ...
- redis multi exec
multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,直到exec()方法被调用. phpredis是php的 ...
- CI Weekly #18 | flow.ci iOS 最佳实践出炉,正式支持 Git@OSC 构建
如大家所期待,flow.ci 现已支持开源中国的代码仓库 - 码云,可以直接构建 Git@OSC 的项目了,点击创建项目-选择代码仓库-选择码云-绑定 OSChina 账户-选择要构建项目,教程看这里 ...
- 【转】10 条提升 Android 性能的建议
每个人都知道一个 App 的成功,与这个 App 的性能体验有着很密切的关系.但是如何让你的 App 拥有极致性能体验呢?在 DroidCon NYC 2015 的这个分享里,Boris Farber ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- springboot(十二):springboot如何测试打包部署
有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ...