U ovom prilogu ćemo vam prikazati kako da kreirate ActiveX kontrolu koristeći JavaScript, i to preko primera koji će poslužiti za detekciju ActiveX za Flash animacije. Ova tehnika može vam kasnije poslužiti i za detekciju drugih kontrola i za kreiranje i korišćenje ActiveX kontrola. Treba reći i to da pošto se radi o ActiveX-u, predstavljeni programski kod i informacije važe samo za Internet Explorer i to u Windows operativnom sistemu.
Inače, mnogo je lakše izvršiti detekciju ActiveX ili recimo Adobe Acrobat-a sa VBScript-om, ali kako to uraditi uz pomoć JavaScript-a te ga tako uklopiti u ostali kod na stranici. JavaScript je sigurno sposoban da uradi sve ono što i VBScript, ali to možda nije šire poznato. Tipični VBScript za detekciju podrške Flash-a mogao bi da izgleda ovako:
<script LANGUAGE="VBScript">
on error resume nextIf Not(IsObject(CreateObject
("ShockwaveFlash.ShockwaveFlash" )))
Then
flashinstalled = 0
Else
flashinstalled = 1
End If
</script>
U JavaScript-u ekvivalent funkcije VB CreateObject je ActiveXObject:
var xObj = new ActiveXObject
("ShockwaveFlash.ShockwaveFlash");
Ako želite da odredite i verziju, onda dodajte podatak o verziji nazivu kontrole:
var xObj = new ActiveXObject
("ShockwaveFlash.ShockwaveFlash.5");
Da biste proverili da li je ActiveX kontrola kreirana, treba samo uporediti vraćenu vrednost sa vrednošću Null:
if (xObj==null)
flashinstalled = false;
else
flashinstalled = true;
Pošto sve može da krene kako ne treba (po Marfiju), kada kreirate kontrole, biće potrebno da zaštitite stranice od generisanja skript grešaka. U VBScript-u iskaz on error pobrinuće se za sve. U JavaScript-u trebalo bi da koristite try/catch iskaz:
try
{
var xObj = new ActiveXObject
("ShockwaveFlash.ShockwaveFlash");
if (xObj==null)
flashinstalled = false;
else
flashinstalled = true;
}
catch (e)
{
flashinstalled = false;
}
Ukoliko se unutar try bloka desi bilo kakva greška, skript će momentalno preći na izvršenje naredbi u bloku catch.
Sve ovo će fino raditi u Internet Explorer-u, ali naravno ništa od ovoga nije podržano od strane Netscape Navigator-a. Zato ćete možda pomisliti da sve što je potrebno da uradite jeste da proverite browser i izvršite gornji programski kod ukoliko korisnik poseduje IE. Na nesreću, čak i ako Netscape ne izvršava gornje naredbe, on i dalje proverava sintaksu i sigurno će se „zakačiti“ za try/catch iskaz. Da biste ovo zaobišli, smestite vaš kod unutar stringa i izvršite ga korišćenjem funkcije eval:
if(IE4plus && !isMac)
eval (‘try {var xObj = new ActiveXObject
("ShockwaveFlash.ShockwaveFlash");
if (xObj) flashinstalled = true; xObj = null; }
catch (e) {}’);
Pratite Krstaricu na www.krstarica.com