none
关于javascript操作串口的问题,期待高人指点 RRS feed

  • 问题

  • 问高人:javascript操作串口的问题,代码如下,串口用串口助手测试是好的,MSComm这东西也已经注册,但是下面的代码串口的读写一直没有执行,请高人看看为什么?
    <html>
      <head>
        <title>JavaScript串口测试 </title>
      <meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
     
    </head>
      <SCRIPT id="clientEventHandlersJS"  LANGUAGE=javascript>
      <!-- 

      function  MSComm1_OnComm() 
      {     
        alert(MSComm1.CommEvent);
        switch(MSComm1.CommEvent)
          {
            case 1:{ window.alert("Send OK!"); break;}  //发送事件
            case 2: { Receive();break;} //接收事件
            default: alert("Event Raised!"+MSComm1.CommEvent);;
          }     

    //-->

    </SCRIPT>

      <SCRIPT language="javascript" for="MSComm1" event="OnComm" >
      <!--
      // MSComm1控件每遇到 OnComm 事件就调用 MSComm1_OnComm()函数
        alert("555");
        MSComm1_OnComm();
      //-->
      </SCRIPT> 

      <script language="JavaScript" type="text/JavaScript">
      <!--

    String.prototype.Blength = function(){ 
        var arr = this.match(/[^\x00-\xff]/ig); 
        return  arr == null ? this.length : this.length + arr.length; 


        function OperatePort()
      {
          if(MSComm1.PortOpen==true)
        {
          try{MSComm1.PortOpen=false;
            document.getElementById("OperateButton").value="打开串口";
          }catch(ex)
            {alert(ex.message);}     
          }
          else{
          try{ MSComm1.PortOpen=true;
            document.getElementById("OperateButton").value="关闭串口";
          }catch(ex)
            {alert(ex.message);}   
          }
      }
     
      function ConfigPort()
      {
        if(MSComm1.PortOpen==false)
        { 
          try{
            MSComm1.CommPort=document.getElementById("ComName").value;
            MSComm1.Settings=document.getElementById("BaudRate").value.toString()+
                            ","+document.getElementById("CheckBit").value.toString()+
                              ","+document.getElementById("DataBits").value.toString()+
                              ","+document.getElementById("StopBits").value.toString(); 
            MSComm1.OutBufferCount =0;          //清空发送缓冲区
            MSComm1.InBufferCount = 0;          //滑空接收缓冲区                       
            alert("已配置串口COM"+MSComm1.CommPort+"\n 参数:"+MSComm1.Settings);     
            }catch(ex){alert(ex.message);}
        }
        else{ alert("请先关闭串口后再设置!");}
      }
     
      function Send()
      {
    //      alert(document.getElementById("txtSend").value);
          var orgstr=document.getElementById("txtSend").value;   
        var newstr="";
        var hexflag=document.getElementById("isSendHex").checked;
        if(hexflag&&orgstr!="")
          {
            if(orgstr.substr(0,2)=="0x"||orgstr.substr(0,2)=="0X") orgstr=orgstr.substring(2,orgstr.length);
          if(orgstr.length%2!=0) orgstr="0"+orgstr;     
            if((newstr=str2hex(orgstr,16))=="") {alert("错误的16进制数");return false;}
          }
          try{
          MSComm1.Output=hexflag?newstr:orgstr;     
          }catch(ex)   
        {alert(ex.message);}
      }

      function Receive()
      { 
        alert("InBufferCount::"+MSComm1.InBufferCount);
        document.getElementById("txtReceive").value += MSComm1.Input; 
        //alert("InBufferCount::"+MSComm1.InBufferCount); 
      }
     
      function ClearReceived()
      {
          document.getElementById("txtReceive").innerText="";
      }
      -->

    </script> 

    <body>

    <form name="form1">   


    <fieldset style="width:200px;height:250px;text-align:center;">
    <legend>配置串口 </legend>
        <div style="float:left;width:200px"> 
        <br/> 
        <span>串口号: </span>
        <select name="ComName" id="ComName" style="width:75px" >
        <option value="1" selected >COM1 </option>
        <option value="2"  >COM2 </option>
        <option value="3"  >COM3 </option>
      <option value="4"  >COM4 </option> 
        </select> 
      <br/> 
        <span>波特率: </span>
        <select name="BaudRate" id="BaudRate" style="width:75px" >
        <option value="9600" selected  >9600 </option>
        <option value="57600"  >57600 </option>
        <option value="115200" >115200 </option> 
        </select> 
        <br/>
     
      <span>校验位: </span>
        <select name="CheckBit" id="CheckBit" style="width:75px" >
        <option value="N" selected  >无NONE </option>
        <option value="O"  >奇ODD </option>
        <option value="E" >偶EVEN </option> 
        </select> 
        <br/> 
     
        <span>数据位: </span>
        <input type=text id="DataBits" name="DataBits" value=8 style="width:75px;height:20px">
        <br/>
     
        <span>停止位: </span>
      <input type=text id="StopBits" name="StopBits" value=1 style="width:75px;height:20px">
        <br/>
        <br/>
        <input  type="button" id="ConfigButton" style="width:80px;height:30px;font-size:13px"  name="ConfigButton"  value="配置串口"  onclick="ConfigPort()">     
        <input  type="button" id="OperateButton" style="width:80px;height:30px;font-size:13px"  name="OperateButton"  value="打开串口"  onclick="OperatePort()">     
        </div>
    </fieldset>


    <fieldset style="width:200px;height:250px;text-align:center;">
    <legend>发送区域 </legend>
    <div style="float:left;">
        <textarea id="txtSend"  name="txtSend" style="width:200px;height:160px"> </textarea>
        <br/>
      <span> <input id="isSendHex" name="isSendHex" type="checkbox" checked="checked" />16进制 </span>
        <input  type="button" id="SendButton" style="width:100px;height:30px" name="SendButton" value="发送" onclick="Send()"> 
    </div>
    </fieldset>

    <fieldset style="width:200px;height:250px;text-align:center;">
    <legend>接收区域 </legend> 
    <div style="float:left;">
        <textarea id="txtReceive" name="txtReceive" style="width:200px;height:160px"> </textarea> 
        <br/>
        <span> <input id="isReceiveHex" name="isReceiveHex" type="checkbox" checked="checked"  />16进制 </span>
        <input  type="button" id="ClearButton" style="width:100px;height:30px"  name="ClearButton"  value="清空"  onclick="ClearReceived()">
    </div>
    </fieldset> 


    </form>

    <OBJECT id="MSComm1" classid="clsid:648A5600-2C6E-101B-82B6-000000000014"
    codebase="MSCOMM32.OCX" type="application/x-oleobject" style="LEFT:54px;TOP:14px" >
          <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="0"/>   
        <PARAM  NAME="OutBufferSize"  VALUE="512"/>
       
        <PARAM  NAME="SThreshold"  VALUE="0"/>
        <PARAM  NAME="RThreshold"  VALUE="1"/>

    </OBJECT>


    </body>
    </html> 
    • 已移动 Sheng Jiang 蒋晟 2009年3月18日 18:50 client side scripting (从 ASP.NET 与 AJAX 移动到 Web 相关讨论(IIS,IE8等))
    2009年3月17日 1:29

答案