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不够熟练,所以没能够达到预期的目的,如果有更好的解决办法,希望大家能够给我留言。
分享到:
相关推荐
1. **事件驱动编程**:在Web应用程序中,键盘输入和扫描枪输入都是通过事件触发的。JavaScript是一种常用于处理这些事件的编程语言,它提供了`addEventListener`方法来监听和处理用户输入事件。 2. **键盘输入事件*...
在本文中,我们将深入探讨如何使用JavaScript来获取扫码枪扫描的条形码数据。在电子商务、库存管理或其他需要快速输入条形码信息的场景中,利用JavaScript与扫码枪的交互能显著提高工作效率。以下是一份详细的步骤和...
总结来说,这个"CommPort.rar"压缩包提供的可能是一个JavaScript串口通信解决方案,包括了与扫描枪、电子秤等设备的交互,以及可能的串口库"TComm-mini"。这个系统利用HTML构建用户界面,并通过JavaScript在浏览器...
通过对扫描枪的基础介绍、工作原理、接口类型以及设置方法的详细讲解,我们可以了解到扫描枪作为一种重要的输入设备,在实际应用中的重要作用。同时,对于开发者而言,掌握如何在C#环境中处理扫描枪的数据也是非常...
【条码扫码枪配置应用服务】是针对企业或组织中数据录入需求的一种高效解决方案,它主要涉及技术应用、前端技术、功能服务、程序开发以及扫描枪的配置等多个方面。这项服务允许用户通过插入扫描枪直接在网页上查看并...
在这个项目中,我们有一个名为"ReadCodeWeb"的DEMO,它是一个基于WEB的应用,专门设计用来配合外置的扫码枪进行二维码或条形码的读取。这个DEMO的目的是为了演示如何在Java环境中接收并处理来自USB设备的数据,如扫...
这个过程展示了如何在Java环境中实现电脑端的二维码扫描,涵盖了从捕获图像到解码的整个流程,是Web应用中实现类似功能的一个基础示例。为了提高性能和用户体验,可以考虑使用多线程处理图片上传和解码,以及优化...
HTML5扫描枪录入工具自动识别来自扫描枪录入的条码并进行提交,屏蔽来自键盘的录入。版本号命名规则X: 版本号, Y: 修订号, Z: 迭代次数如:Ver.X.Y.Z 代表第X版,第Y次修订,第Z次迭代。开源声明Given enough ...
在这个DEMO中,扫码枪被配置为模拟键盘输入,当扫描一个条码或二维码时,其内容会被当作键盘输入传递给Web应用。 4. **事件监听**: - 在Java应用中,通常使用事件监听机制来处理输入设备的事件。这个项目可能使用...
在IT行业中,JavaScript是一种广泛使用的前端编程语言,用于构建交互性强的网页应用。"JavaScript集成光标扫码枪"是将扫码枪的功能与网页相结合的技术,它使得用户可以通过扫码枪直接在网页上输入扫描数据,提高了...
2. **JavaScript与Java交互**:为了实现H5调用Android原生功能,如二维码扫描,需要利用`WebView`的`addJavascriptInterface`方法,在Java层创建一个接口并暴露给JavaScript,使得H5代码可以通过`window对象`调用...
【IE浏览器web扫描插件】是一种专为IE浏览器设计的扩展功能,旨在提供方便快捷的文档扫描服务。这种插件能够将本地的物理扫描仪集成到网页应用中,让用户可以直接在浏览器内完成文件扫描,无需跳出浏览器进行多步...
在本案例中,扫码枪通过USB CDC接口与电脑建立连接,将扫描到的条形码或二维码数据传输至计算机。 中标麒麟操作系统是一款国产的Linux发行版,常用于政府和企业领域,以保障信息安全。结合龙芯处理器,这表明此解决...
在IT行业中,"WEB + JS 扫码枪"是一个典型的前端技术应用场景,它结合了Web技术与JavaScript(JS)的功能,使得网页能够直接处理来自扫码枪的数据输入。在这个场景下,用户无需点击任何按钮,只需通过扫码枪扫描条形...
在JavaScript中实现扫码枪扫描二维码的功能,主要是通过监听键盘事件来获取扫码枪输入的数据。扫码枪扫描二维码的过程,实质上是模拟用户手动输入的过程,因此可以通过监听`onkeypress`事件来捕捉这一行为。以下是对...
在JavaScript编程中,有时我们需要与硬件设备如USB扫码枪进行交互,以便实时获取扫描到的数据。本文将介绍一种有效的方法来处理USB扫码枪输入的数据,确保数据完整无误,并能够自动触发登录功能。 首先,要获取USB...
在IT行业中,条形码枪控件是一种常用于读取和处理条形码数据的软件组件,尤其在库存管理、零售、物流等领域有着广泛应用。在这个"条码枪控件实例jsp例子"中,我们将深入探讨如何在JavaServer Pages (JSP) 环境下集成...