2009-09-22 18 views
5

Mam proste HTML na Login.aspx z obiektu ActiveX:javascript: „Obiekt nie obsługuje tej właściwości lub metody”, gdy obiekt ActiveX o nazwie

<!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> 

Kod działa perfekcyjnie na moim komputerze (edit: hostowany i uruchamiany), nie działa z drugiej strony: występuje błąd "Obiekt nie obsługuje tej właściwości lub metody" w pierwszym wierszu funkcji javascript. Plik cab znajduje się w tym samym folderze co plik strony. W ogóle nie znam javascriptu i nie mam pojęcia, dlaczego pojawia się problem. Googling nie pomógł. Czy masz jakiś pomysł?

Edycja: na obu komputerach użyto IE i włączono activex.

Edycja2: Dodałem także, jeśli (document.MyActiveX) na początku funkcji i nadal dostaję błąd w tym samym wierszu kodu - mam na myśli, że wygląda jak dokument.MyActiveX jest prawdziwy, ale wywołanie metody nadal się nie udaje

+0

Czy na pewno włączona jest obsługa ActiveX na komputerze, na którym się nie udaje? Zauważ, że Strefa będzie miała znaczenie (lokalny, intranetowy, internetowy) i będzie mieć różne cechy bezpieczeństwa. Strefy lokalne, intranetowe mają zazwyczaj domyślnie wyłączone ActiveX. –

+0

sprawdził to wszystko - wszystkie strefy mają wszystko z włączonym ActiveX – agnieszka

+0

tutaj ten sam problem. ta sama strona działa w IE7, ale nie w IE8. –

Odpowiedz

0

Może przeglądarka na innym komputerze nie obsługuje ActiveX? tylko szalona domysłowa

+0

nie. tzn. z włączoną obsługą ActiveX – agnieszka

2

Wydaje mi się, że zdarzenie onload powoduje uruchomienie funkcji jeszcze przed załadowaniem obiektu ActiveX. Można spróbować następujących zamiast:

<!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> 

Teraz funkcja getUserInfo() zacznie działać 500 milisekund po załadowaniu strony. To musi dać trochę czasu na załadowanie obiektu ActiveX.

+0

W większości przypadków instalacja ActiveX jest blokowana przez przeglądarki. W przypadku korzystania z IE pojawia się żółty pasek alertu z pytaniem, czy chcesz zainstalować obiekt. Dopiero po uzyskaniu zgody użytkownika obiekt zostanie zainstalowany. Jeśli obiekt nie jest załadowany, funkcja zajmująca się obiektem musi sprawdzić, czy wymagany obiekt jest załadowany. I hej, nie wszystkie obiekty ActiveX są wstępnie załadowane w maszynie każdego. – Nirmal

+0

, ale nie ma paska alertu ..tylko błąd – agnieszka

+0

Ponieważ wywołujesz funkcję zaraz po załadowaniu dokumentu, istnieje możliwość, że funkcja będzie działała jeszcze przed załadowaniem obiektu ActiveX. Zobacz moją zredagowaną odpowiedź. – Nirmal

0

Być może ActiveX wymaga pewnych wymagań wstępnych (na przykład CRuntime), których nie ma na innych komputerach? Czy próbowałeś uruchomić depends dla Activex na komputerze hostingowym?

0

Być może druga maszyna ma skaner antywirusowy lub coś podobnego, która cicho zapobiega użyciu formantów ActiveX?

2

IE8 zarządza dostępem do ActiveX na poziomie domeny.

Aby to naprawić:

  1. IE8, Narzędzia -> Zarządzaj dodatkami
  2. W "Paski narzędzi i rozszerzenia" znaleźć ActiveX
  3. Prawy przycisk myszy - Więcej informacji
  4. Click - Zezwól na wszystkie witryny
  5. Ciesz się
Powiązane problemy