javascript:调用ActiveX对象时“对象不支持此属性或方法”

时间:2009-09-22 07:19:18

标签: javascript activex

我在Login.aspx上有一个带有ActiveX对象的简单html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head><title></title>
<script language="javaScript" type="text/javascript"> 

    function getUserInfo() 
    {
        var userInfo = MyActiveX.GetInfo();
        form1.info.value = userInfo;
        form1.submit();
    }

</script>
</head>

<body onload="javascript:getUserInfo()">
<object id="MyActiveX" name="MyActiveX" codebase="MyActiveX.cab" classid="CLSID:C63E6630-047E-4C31-H457-425C8412JAI25"></object>
    <form name="form1" method="post" action="Login.aspx">
        <input type="hidden" id="info" name="info" value="" />
    </form>
</body>
</html>

代码在我的机器上工作得很好(编辑:托管和运行),它在另一个上不起作用:在javascript函数的第一行中有一个错误“对象不支持这个属性或方法” 。 cab文件与页面文件位于同一文件夹中。我根本不懂javascript,也不知道为什么会出现这个问题。谷歌搜索没有帮助。你知道吗?

编辑:在两台机器上使用IE并启用了activex。

Edit2:我还在函数的开头添加if(document.MyActiveX)并且我仍然在同一行代码中出错 - 我的意思是它看起来像document.MyActiveX是真的但调用方法仍然失败

5 个答案:

答案 0 :(得分:2)

我认为onload事件正在使函数在加载ActiveX对象之前运行。您可以尝试以下方式:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title></title>
        <script language="javaScript" type="text/javascript">
            function getUserInfo(){
                if(document.MyActiveX){
                    var userInfo = MyActiveX.GetInfo();
                    form1.info.value = userInfo;
                    form1.submit();
                }
            }
        </script>
    </head>
    <body>
        <object id="MyActiveX" name="MyActiveX" codebase="MyActiveX.cab" classid="CLSID:C63E6630-047E-4C31-H457-425C8412JAI25"></object>
        <script for="window" event="onload" language="JavaScript">
            window.setTimeout("getUserInfo()", 500);
        </script>

        <form name="form1" method="post" action="Login.aspx">
            <input type="hidden" id="info" name="info" value="" />
        </form>
    </body>
</html>

现在,加载页面后,getUserInfo()函数将开始运行500毫秒。这必须给一些时间来加载ActiveX对象。

答案 1 :(得分:2)

IE8管理域级别的ActiveX访问。

修复它:

  1. IE8,工具 - &gt;管理加载项
  2. 在“工具栏和扩展程序”中找到您的ActiveX
  3. 右键单击 - 更多信息
  4. 点击 - 允许所有网站
  5. 享受

答案 2 :(得分:0)

也许其他机器上的浏览器不支持activeX?只是一个疯狂的猜测

答案 3 :(得分:0)

也许ActiveX需要一些其他机器上不存在的先决条件(例如CRuntime)?您是否尝试在主机上为Activex运行depends

答案 4 :(得分:0)

也许其他机器有一个病毒扫描程序或类似程序,它会无声地阻止ActiveX的使用?