MSComm32.ocx在IE加载正常,但JS访问运行无效?

dzp_BOC 2009-10-28 07:44:53
在我单位的机器上,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>




...全文
988 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hss182411 2009-10-30
  • 打赏
  • 举报
回复
看来这问题属于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恢复正常的串口通讯能力!
natineprince 2009-10-28
  • 打赏
  • 举报
回复
或者试试注销掉再重新注册吧...
以前试过有些机器放些日子就好了...
有些是要重装系统...
natineprince 2009-10-28
  • 打赏
  • 举报
回复
那应该是还没有获取到MSComm32的ActiveX对象吧...
可能和IE有关...
无能为力...
dzp_BOC 2009-10-28
  • 打赏
  • 举报
回复
OK没有弹出来!
在运行到
//打开端口并发送命令程序
function OpenPort()
{
alert(MSComm1.PortOpen);
if(MSComm1.PortOpen==false)
....
}
alert(MSComm1.PortOpen); 弹出的是未定义对象.
natineprince 2009-10-28
  • 打赏
  • 举报
回复
OK有弹出来吗?
dzp_BOC 2009-10-28
  • 打赏
  • 举报
回复
我在单位机器上运行用VB编写的Mscomm32.ocx程序运行是正常的,而且在单位机器上使用过各种串口软件都没有问题,但在网页上就是不行.
natineprince 2009-10-28
  • 打赏
  • 举报
回复
那台机用其他串口工具能测试通过吗?

87,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧