日期:2014-05-17  浏览次数:20890 次

asp.net中js调用activex的方法提示“该对象不支持此属性或方法”
我在ActiveX中定义了一个方法:关闭串口
public void closeser()
{
     comm.close();
}

在加入该ActiveX控件的页面上编写js调用该方法
<object id="ActiveX" classid="clsid:0A080A10-5F36-4781-A592-74FDCCB1F30B" codebase="ActiveX.cab">    </object>
    <script language="javascript" type="text/javascript">
            function CallActiveXFunction(){
                     var activeObj=document.getElementById("ActiveX");
                     if(activeObj){
                                    document.getElementById("ActiveX").closeser();
                                  }
                    }
     </script>


 <input type="button" onClick="javascript:CallActiveXFunction();" value="关闭串口" id="Button1" runat="server"></input>

但我点击“关闭串口”按钮后,提示网页有错误,查看后是这条语句document.getElementById("ActiveX").closeser();有问题。
问题是“该对象不支持此属性或方法”。
请路过的高手指点一下该如何解决。

------解决方案--------------------
检查下,你嵌入的是不是包含 closeser 的那个对象
------解决方案--------------------
1.检查你的ActiveX是不是为COM互操作注册
2.你的ActiveX是不是受信任的,可以在程序集中加入
   using System.Security;
   [assembly: AllowPartiallyTrustedCallers()]
------解决方案--------------------
你可以先在早期的开发平台上验证你的这个COM组件,例如在excel的vba编程平台里,从菜单上选择“引用”,然后引用你的COM组件,然后在一个代码模块中写
sub asdfaf
   dim x as new 你的控件的命名空间.你的控件的类名
   x.closeser()
end sub


通常,在你写 x. 这个句点的时候,你就可以看到你的控件有没有暴露相应的方法给 COM 了。

如果没有暴露,那么你开发COM的声明方法有错误。例如 ClassInterfaceAttribute 标签声明不对,或者缺少一个必要的 interface 定义COM组件的接口,或者接口方法上缺少 DispIdAttribute 标签定义,等等。