JavaScript – Korišćenje ActiveX kontrola

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 next

If 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