JavaScriptスキャンガン応用(三)
3820 ワード
原理を実現する:Objectタグを文字列でページのbodyに追加し、atachEvent方式でAxtiveXに応答イベントを追加し、キャッシュされたシリアル情報を遅延してシリアル通信を完了し、パラメータとページのパラメータ伝達と応答を実行します.以下は具体的な実現過程です.
mscomm.jsファイルの内容:
mscomm.jsファイルの内容:
// JavaScript Document
function createMSComm(callBackFunction) {
var mscomm_str = "<OBJECT id=MSComm1 CLASSID='clsid:648A5600-2C6E-101B-82B6-000000000014' codebase='MSCOMM32.OCX' type='application/x-oleobject' style='width:100px;height:30px' >"
+"<PARAM NAME='CommPort' VALUE='1'/> "
+"<PARAM NAME='DataBits' VALUE='8'/> "
+"<PARAM NAME='StopBits' VALUE='1'/>"
+"<PARAM NAME='BaudRate' VALUE='9600'/>"
+"<PARAM NAME='Settings' VALUE='9600,N,8,1'/>"
+"<PARAM NAME='RTSEnable' VALUE='1'/>"
+"<PARAM NAME='DTREnable' VALUE='1'/>"
+"<PARAM NAME='Handshaking' VALUE='0'/>"
+"<PARAM NAME='NullDiscard' VALUE='0'/> "
+"<PARAM NAME='ParityReplace' VALUE='?'/>"
+"<PARAM NAME='EOFEnable' VALUE='0'/>"
+"<PARAM NAME='InputMode' VALUE='0'/>"
+"<PARAM NAME='InBufferSize' VALUE='1024'/>"
+"<PARAM NAME='InputLen' VALUE='1'/>"
+"<PARAM NAME='OutBufferSize' VALUE='512'/>"
+"<PARAM NAME='SThreshold' VALUE='0'/>"
+"<PARAM NAME='RThreshold' VALUE='1'/>"
+"</OBJECT>";
// OBJECT body
document.body.insertAdjacentHTML(' beforeEnd',mscomm_str);
//
if(MSComm1.PortOpen==false){
try{
MSComm1.PortOpen=true;
}catch(ex){
alert("com1 :"+ex.message);
}
}
//
MSComm1.attachEvent("OnComm",function() {
switch(MSComm1.CommEvent){
case 2: //
if(mscomm_scan_value == "") {
mscomm_scan_value = MSComm1.Input;
//
setTimeout("getMSCommScanValue()",300);
}
break;
default: alert("Event Raised!"+MSComm1.CommEvent);
}
});
}
//
var mscomm_scan_value = "";
//
function getMSCommScanValue(){
//
while(MSComm1.inBufferCount > 0) {
mscomm_scan_value += MSComm1.Input;
}
//
callBackFunction(mscomm_scan_value);
//
mscomm_scan_value = ""
}
test.ファイル:
<html>
<head>
<title>JavaScript </title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<script type="text/javascript" src="mscomm.js" >
</script>
<script type="text/javascript">
var i = 0;
function mscommCallBack(scanValue) {
var ewtm = document.getElementById("ewtm");
ewtm.innerHTML += " " + (++i) + " :" + scanValue;
}
window.onload = function() {
createMSComm(mscommCallBack);
}
</script>
</head>
<body>
:
<div id="ewtm"></div>
</body>
</html>