javascript: объект не поддерживает это свойство или метод при вызове объекта ActiveX

У меня есть простой html на Login.aspx с объектом 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() 
    {
        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, но вызов метода все еще не работает


person agnieszka    schedule 22.09.2009    source источник
comment
Вы уверены, что ActiveX включен на машине, на которой у вас произошел сбой? Обратите внимание, что зона будет иметь значение (локальная, интрасеть, Интернет) и иметь разные характеристики безопасности. В локальных зонах интрасети ActiveX по умолчанию обычно полностью отключен.   -  person Rick Strahl    schedule 22.09.2009
comment
все проверил - во всех зонах все с включенным активксом   -  person agnieszka    schedule 22.09.2009
comment
такая же проблема здесь. та же страница работает в IE7, но не в IE8.   -  person Oleg Kalenbet    schedule 16.06.2010
comment
вы нашли решение для этого?   -  person Ali Issa    schedule 20.12.2013


Ответы (5)


Я думаю, что событие 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.

person Nirmal    schedule 22.09.2009
comment
В большинстве случаев установка ActiveX блокируется браузерами. При использовании IE появляется желтая панель предупреждений с вопросом, хотите ли вы установить объект. Только после согласия пользователя объект будет установлен. Если объект не загружен, то функция, работающая с объектом, должна проверить, загружен ли требуемый объект. И эй, не все объекты ActiveX предварительно загружены на каждый компьютер. - person Nirmal; 22.09.2009
comment
Поскольку вы вызываете функцию сразу после загрузки документа, существует вероятность того, что функция запустится еще до загрузки объекта ActiveX. Обратитесь к моему отредактированному ответу. - person Nirmal; 22.09.2009
comment
‹object› поддерживает событие загрузки; ОП также может попробовать запустить getUserInfo() оттуда. - person outis; 22.09.2009
comment
вообще не запускает функцию js - person agnieszka; 22.09.2009
comment
Вы уверены, что функция не запущена? Можете ли вы перепроверить с предупреждающим сообщением внутри функции? - person Nirmal; 22.09.2009
comment
Как предложил outis, вы можете попробовать поместить условие загрузки в тег объекта. ‹объект onload=getUserInfo();› - person Nirmal; 22.09.2009

IE8 управляет доступом к ActiveX на уровне домена.

Починить это:

  1. IE8, Инструменты -> Управление надстройками
  2. В "Панели инструментов и расширения" найдите свой ActiveX
  3. Щелкните правой кнопкой мыши — дополнительная информация
  4. Нажмите - Разрешить на всех сайтах
  5. Наслаждаться
person Oleg Kalenbet    schedule 16.06.2010

может браузер на другой машине не поддерживает ActiveX? просто дикая догадка

person Khodor    schedule 22.09.2009

Может быть, для ActiveX нужны какие-то предварительные условия (например, CRuntime), которых нет на других машинах? Пробовали ли вы запускать зависимости для Activex на хост-компьютере?

person Shay Erlichmen    schedule 22.09.2009

Может быть, на другой машине есть антивирусный сканер или аналогичный, который молча предотвращает использование ActiveX?

person erikkallen    schedule 22.09.2009