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:
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á.
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:
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:
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:
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:
a hosszabb verzió helyett:
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.
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:
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:
A következő HTML kód futtatja és megjeleníti az appletet, és elnevezi "HelloWorld" néven (a name attribútummal):
Ha ez a dokumentum első appletje (a lapon legfelül), JavaScriptből a következő módok egyikével hivatkozhatunk rá:
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.
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 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 következő példában benne van minden HTML, ami ahhoz szükséges, hogy rávegyük a plug-int hanglejátszásra.
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.:
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.