A Javascript programozási nyelv

LiveConnect

JavaScript-Java kommunikáció

Ez a rész a LiveConnect technológia használatát írja le, amely lehetővé teszi a Java és JavaScript kódok egymás közti kommunikációját. Ezen rész megfelelő megértéséhez szükséges a Java nyelv ismerete.

Mi az a LiveConnect? A Navigator böngészőben a LiveConnect-el a következő dolgokat tehetjük meg:

Megj.: A LiveConnect a Navigator 1.1-s verziójától automatikusan engedélyezve van.

Ha egy Java csomagra vagy osztályra ( objektumra, tömbre stb.) akarunk hivatkozni, akkor az egyik speciális LiveConnect objektumot fogjuk használni. Minden JavaScript felőli Java elérés ezekkel az objektumokkal történik, amelyek a következők:

Objektum Leírás
JavaArray Egy csomagolt Java tömb, JavaScript kódból elérve.
JavaClass JavaScript hivatkozás egy Java osztályra.
JavaObject Csomagolt Java objektum, JavaScript kódból elérve.
JavaPackage JavaScript hivatkozás egy Java csomagra.

Mivel a Java erősen típusos nyelv és a JavaScript nem az, ezért a JavaScript futásidejű motor konvertálja az argumentum értékeket a másik nyelvben használt megfelelő típusokká.

Munka a Java tömbökkel

Ha valamely Java eljárás létrehoz egy tömböt és arra a tömbre JavaScriptből hivatkozunk, akkor a JavaArray-al dolgozunk. Pl:

theint = java.lang.Class.forName("java.lang.integer"); tomb = java.lang.reflect.Array.newinstance(theint, 5);

Ez a kód létrehoz egy 'tomb' elnevezésű JavaArray tömböt int (integer - egész) típussal és öt elemmel.

Mint a JavaScript Array objektuma, a JavaArray is rendelkezik egy length tulajdonsággal, amely a tömb elemeinek számával tér vissza. Nem úgy, mint az Array.length, a JavaArray.length egy csak olvasható tulajdonság, mert a Java tömb elemeinek száma rögzített.

A Packages objektum

Ha egy Java osztály nem része a java, sun, vagy netscape csomagoknak, akkor a Packages objektumon keresztül érhetjük el. Pl. vegyünk egy tetszőleges Java csomagot, nevezzük "A"-nak, ami több Java beli osztályt foglal magában. Ekkor egy HelloVilag nevű osztály A-beli példányának létrehozásához a konstruktort így érhetjük el:

var SziaVilag = new Packages.A.HelloVilag();

Az alapértelmezett csomagok osztályait is elérhetjük (azaz, azokat az osztályokat, amelyekhez nem neveznek el csomagot). Például, ha a HelloVilag osztály közvetlenül a CLASSPATH-ban és nem csomagban van, akkor a következők szerint érhetjük el:

var SziaVilag = new Packages.HelloVilag();

Ha a java, sun, netscape Java-beli csomagokat akarjuk elérni akkor a Packages elhagyható, a LiveConnect saját "beépített" java, sun, netscape objektumai segítségével. Ilyenkor ezek egyfajta könyvjelzőként müködnek. Pl:

var myString = new java.lang.String("Hello world");

a hosszabb verzió helyett:

var myString = new Packages.java.lang.String("Hello world");

Csomag és osztály hivatkozások

A JavaPackage és a JavaClass objektumokat a Javascriptből történő hivatkozások hozzák létre. Ezek az objektumok akkor jönnek létre, amikor Java csomagokra és osztályokra hivatkozunk JavaScriptből.

Pl. a Packages.A (lásd fentebb) egy JavaPackage objektum, míg a java.lang.String egy JavaClass objektum.

Általában nem kell törődnünk a JavaPackage és JavaClass objektumokkal - csak a Java csomagokkal és osztályokkal dolgozunk, és a LiveConnect létrehozza ezeket az objektumokat.

A JavaClass objektumok nem konvertálódnak automatikusan java.lang.Class példányokká, ezért a java.lang.Class példány köré úgynevezett csomagolót kell létrehozni. A következő példában a forName eljárás létrehozza a theClass csomagoló objektumot, amely ezután át lesz adva a newinstance eljárásnak, hogy egy tömböt hozzon létre.

theClass = java.lang.Class.forName("java.lang.String"); theArray = java.lang.reflect.Array.newinstance(theClass, 5);

char típusú argumentumok:

Nem lehet átadni egykarakteres karakterláncot olyan Java eljárásnak, amely char típust vár. Ezt a problémát az Unicode értékekkel oldjuk meg. Ilyenkor az eljárásnak egy egész számot adunk át, ami az adott karakter Unicode értékével egyezik meg. Például, a következő kód hozzárendeli a "H" értéket az a változóhoz:

a = new java.lang.Character(72);

Java appletek vezérlése

JavaScripttel lehet Java appleteket is vezérelni. Ilyenkor nem szükséges ismernünk az applet belső felépítését, anélkül is vezérelhetjük azt. Az applet minden "public" változója, tulajdonsága, eljárása elérhető a JavaScript számára. Például, használhatunk gombokat egy HTML űrlapon egy Java applet indítására és megállítására - ezek a gombok a dokumentumon belül bárhol megjelenhetnek. A JavaScript felől egy dokumentum appletjeire a document.appletName módon hivatkozhatunk. (az appletName az <applet> tag name attribútumának értéke)

Az applets tömb tartalmazza a lap minden appletjét. A tömb elemeire kétféleképpen hivatkozhatunk:

Például, vegyük az alapvető "Hello World" appletet:

import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } }

A következő HTML kód futtatja és megjeleníti az appletet, és elnevezi "HelloWorld" néven (a name attribútummal):

<applet code="HelloWorld.class" name="HelloWorld" width=150 height=25> </applet>

Ha ez a dokumentum első appletje (a lapon legfelül), JavaScriptből a következő módok egyikével hivatkozhatunk rá:

document.HelloWorld; document.applets["HelloWorld"]; document.applets[0];

Az applets tömbnek van egy length tulajdonsága, a document.applets.length, amely a dokumentumban szereplő appletek számát adja meg.

Egy appletben deklarált minden nyilvános változó, és azok felmenő osztályai és csomagjai elérhetőek JavaScriptből. Egy appletben deklarált statikus eljárások és tulajdonságok a JavaScriptből az Applet objektum eljárásaiként és tulajdonságaiként érhetők el. A tulajdonság értékek kiolvashatók és beállíthatók, az eljárások meghívhatóak; karakterlánc-, numerikus- és boolean értékekkel térnek vissza.

LiveAudio és LiveConnect

A LiveAudio, mint nevéből is lehet sejteni, hangok kezelésére szolgál JavaScriptben. A LiveConnect, LiveAudio, és JavaScript használatakor, alapvetően bármely esemény, amely a JavaScript szerkezetével programkódból leírható, meghívhat egy hang eseményt. Például, létrehozhatunk alternatív hangvezérlő csatolófelületeket, késleltetve a hangfájl betöltődését, amíg a felhasználó rákattint egy gombra, létrehozhatunk gombokat, amelyek kattintásra hangot adnak ki, vagy létrehozhatunk hang-megerősítést a felhasználói felülettel való kommunikációhoz (egy objektum "elmondja", mit csinál, amikor a felhasználó rákattint, vagy föléviszi a kurzort).

A LiveAudio vezérlésére szolgáló JavaScript eljárások

A LiveAudio a következőkben felsorolt főbb JavaScript vezérlő eljárásokat szolgáltatja. Ezen JavaScriptből (és weblapról) elérhető eljárások számára be kell ágyazni egy LiveAudio konzolt valahol a lapon.

Ezen JavaScript eljárások nem vezérlik a LiveAudio plug-int, csak információt nyújtanak annak állapotáról:

A LiveAudio LiveConnect eljárások használata

A következő példában benne van minden HTML, ami ahhoz szükséges, hogy rávegyük a plug-int hanglejátszásra.

<html> <body> <embed src="sound1.wav" hidden=true> <a href="javascript:document.embeds[0].play(false)">Szóljon a zene!</a> </body> </html>

Ez a hanglejátszásra szolgáló eljárás valószínűleg a legegyszerűbb. Ezzel azonban lehetnek gondok: ha a document.embeds tömböt használjuk, a JavaScript 1.0 hibát generál, mivel az embeds tömb JavaScript 1.1 szolgáltatás. Az embeds tömb használata helyett, az egyedi <embed> elemet használjuk annak name és mastersound attribútumával.:

<html> <body> <embed src="sound1.wav" hidden="true" name="firstsound" mastersound> <a href="javascript:document.firstsound.play(false)">Szóljon a zene!</a> </body> </html>

Ha több hangot ágyaztunk be egy HTML dokumentumba, akkor a fejlesztők számára könnyebb a name attribútum használata az embeds tömb helyett. A példában az <embed> tag mastersound attribútumát használtuk. Ez azért történt, mert valahányszor a LiveAudio hivatkozáshoz egy name attribútumot használunk, jelen kell lennie egy mastersound attribútumnak is.

W3C NEM támogatja az <embed> tag használatát. Multimédia fájlokhoz az <object> a hivatalos ajánlás.