在我单位的机器上,MSComm32.ocx在IE加载项可以正常显示,但是Javascript访问运行时却无法访问到串口,也不会报错。程序代码在我家里的机器上运行是正常的,系统环境基本类似,都是装有Macfee杀毒软件,不知是何原因?
    曾经作过如下处理,但是问题仍然存在,请各位高手赐教。
    1、重新安装MSComm32.ocx.
         @rem 注册控件 
         @copy Mscomm32.ocx %windir% 
         @copy Mscomm32.ocx %windir%\system32 
         @Regsvr32 Mscomm32.ocx 
         regedit /s mscomm32.reg 
         @regsvr32 actxprxy.dll 
         @regsvr32 shdocvw.dll 
         @rem 重新启动 
         @ECHO OFF & cd/d %temp% & echo [version] > {out}.inf 
         @(set inf=InstallHinfSection DefaultInstall)  
         @echo signature=$chicago$ >> {out}.inf 
         @echo [defaultinstall] >> {out}.inf 
          @rundll32 setupapi,%inf% 1 %temp%\{out}.inf      2、mscomm32.reg 的内容如下:
         Windows Registry Editor Version 5.00          [HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905] 
         @ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"     3、网页代码如下:
<html> 
<head> 
<title>JavaScript串口(通过 vb 的 MSCOMM32.OCX 控件)</title><SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript> 
<!-- 
//重写 mscomm 控件的唯一事件处理代码 
function MSComm1_OnComm() 

var len=0;
//window.alert("happy"); 
if(MSComm1.CommEvent==1)//如果是发送事件 

window.alert("ok");//这句正常,说明发送成功了 

else if(MSComm1.CommEvent==2)//如果是接收事件 

//window.alert(MSComm1.CommEvent);//! ‘
//window.alert(MSComm1.Input);//
document.form1.txtReceive.value=document.form1.txtReceive.value + MSComm1.Input;
} return false; 

//--> 
</SCRIPT> <SCRIPT LANGUAGE=javascript FOR=MSComm1 EVENT=OnComm> 
<!-- 
// MSComm1控件每遇到 OnComm 事件就调用 MSComm1_OnComm()函数
MSComm1_OnComm()
//--> 
</SCRIPT> 
<script language="JavaScript" type="text/JavaScript"> 
<!--
//打开端口并发送命令程序 
function OpenPort() 

alert(MSComm1.PortOpen);
if(MSComm1.PortOpen==false) 

MSComm1.PortOpen=true; 
MSComm1.Output="R";//发送命令

else 

window.alert ("已经开始接收数据!"); 


--> 
</script> </head><OBJECT CLASSID="clsid:648A5600-2C6E-101B-82B6-000000000014" id=MSComm1 codebase="MSCOMM32.OCX" type="application/x-oleobject" 
style="LEFT: 54px; TOP: 14px" >
<PARAM NAME="CommPort" VALUE="1"> 
<PARAM NAME="DTREnable" VALUE="1"> 
<PARAM NAME="Handshaking" VALUE="0"> 
<PARAM NAME="InBufferSize" VALUE="1024"> 
<PARAM NAME="InputLen" VALUE="0"> 
<PARAM NAME="NullDiscard" VALUE="0"> 
<PARAM NAME="OutBufferSize" VALUE="512"> 
<PARAM NAME="ParityReplace" VALUE="?"> 
<PARAM NAME="RThreshold" VALUE="1"> 
<PARAM NAME="RTSEnable" VALUE="1"> 
<PARAM NAME="SThreshold" VALUE="2"> 
<PARAM NAME="EOFEnable" VALUE="0"> 
<PARAM NAME="InputMode" VALUE="0"> <PARAM NAME="DataBits" VALUE="8"> 
<PARAM NAME="StopBits" VALUE="1"> 
<PARAM NAME="BaudRate" VALUE="9600"> 
<PARAM NAME="Settings" VALUE="9600,N,8,1">
</OBJECT> 
<body><form name="form1"> 
<input type="button" name="Submit" value="提交" onClick="OpenPort()">
<input type="text" name="txtReceive" value=""> 
</form> 
</body> 
</html> 

解决方案 »

  1.   

    我在单位机器上运行用VB编写的Mscomm32.ocx程序运行是正常的,而且在单位机器上使用过各种串口软件都没有问题,但在网页上就是不行.
      

  2.   

    OK没有弹出来!
    在运行到
    //打开端口并发送命令程序 
    function OpenPort() 

    alert(MSComm1.PortOpen); 
    if(MSComm1.PortOpen==false) 
    ....
    }
    alert(MSComm1.PortOpen); 弹出的是未定义对象.
      

  3.   

    那应该是还没有获取到MSComm32的ActiveX对象吧...
    可能和IE有关...
    无能为力...
      

  4.   

    看来这问题属于win操作系统漏洞,具体原因不明,但是可以肯定的是通过IE加载的ActiveX控件被莫名删除,导致了应用不能驱动外设! 
    解决方法如下: 
    1.删除原机器中的MSCOMM32.OCX控件 
      -HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905 
    2.再次注册控件 
      copy mscomm*.* %windir%\system32\ /y 
      Regsvr32 %windir%\system32\mscomm32.ocx /s 
      Regsvr32 %windir%\system32\actxprxy.dll /s 
      Regsvr32 %windir%\system32\shdocvw.dll /s 
      reg add "HKCR\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905" /v "" /d "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun" /f 
      pause 
      注册后重启机器 
    3.下载 IE7(ie7-windowsxp-x86-chs.exe ),并重新安装,成功安装后需再次重启,紧接着删除IE7——此步骤的目的主要是让IE7覆盖之前win系统中的IE版本,使用工具卸载IE7后,win系统自动恢复原来IE版本时会重新加载附加项,此时 即可让 “Microsofr Communications Control version 6.0”控件正常加载! 4.此时需要删除3中安装ie7时留下的注册表信息——防止双击IE时会自动产生IE快捷方式的bug 
      reg delete "HKEY_CLASSES_ROOT\CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}\shell\OpenHomePage" /v "LegacyDisable" /f 至此IE恢复正常的串口通讯能力!