views:

1766

answers:

5

I've got simple html on Login.aspx with an ActiveX object:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<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>

The code works perfectly fine on my machine (edit: hosted and run), it does't work on the other: there is an error "Object doesn't support this property or method" in the first line of javascript function. The cab file is in the same folder as the page file. I don't know javascript at all and have no idea why is the problem occuring. Googling didn't help. Do you ave any idea?

Edit: on both machines IE was used and activex was enabled.

Edit2: I also added if (document.MyActiveX) at the beggining of the function and I still get error in the same line of code - I mean it looks like document.MyActiveX is true but calling the method still fails

A: 

maybe the browser on the other machine does not support activeX? just a wild guess

Kheu
nope. ie with activex enabled
agnieszka
+1  A: 

I think the onload event is making the function to run even before the ActiveX object is loaded. You may try the following instead:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<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>

Now the getUserInfo() function will start to run 500 milliseconds after the page is loaded. This must give some time for the ActiveX object to be loaded.

Nirmal
Most of the times, ActiveX installation is blocked by the browsers. If using IE, a yellow alert bar appears asking whether you want to install the object. Only after the user's consent, the object will be installed. If the object is not loaded, then the function dealing with the object must check whether the required object is loaded. And hey, not all ActiveX objects are pre-loaded in everyone's machine.
Nirmal
but there is no alert bar.. just an error
agnieszka
Since you are calling the function as soon as the document loads, there is a possibility that the function runs even before the ActiveX object is loaded. Refer to my edited answer.
Nirmal
<object> supports the load event; OP could also try running `getUserInfo()` from there.
outis
doesn't fire the js function at all
agnieszka
Are you sure the function is not fired? Can you recheck with an alert message inside the function?
Nirmal
As suggested by outis, you can try placing the onload condition in the object tag. <object onload="getUserInfo();">
Nirmal
A: 

Maybe the ActiveX needs some prerequisite (For example CRuntime) that isn't present on the other machines? Have you tried running depends for the Activex on the hosting machine?

Shay Erlichmen
A: 

Maybe the other machine has a virus scanner or similar which silently prevents ActiveX use?

erikkallen
A: 

IE8 manages access to the ActiveX on domain level.

To fix it:

  1. IE8, Tools -> Manage Add-ons
  2. In "Toolbars and Extensions" find your ActiveX
  3. Right click - More information
  4. Click - Allow on all sites
  5. Enjoy
Oleg Kalenbet