Leírások+Referenciák / JavaScript / III. Keretek

Keretek létrehozása HTML dokumentumban

Egyre gyakrabban találkozni olyan oldalakkal, amelyek kereteket tartalmaznak. A Netscape a 2.0-ás, az Internet Explorer a 3.0-ás változatától tudja kezelni a kereteket. A keretek felosztják a böngészõ ablakát, és mindegyik rendelkezik az alábbi alapvetõ tulajdonsággokkal:

  • meg tud jeleníteni egy önálló HTML dokumentumot
  • rendelkezhet névvel, amely segítségével hivatkozhatunk rá
  • automatikusan méretezi önmagát az ablak méretének változása során, valamint engedélyezhetjük vagy megtilthatjuk, hogy a felhasználó saját maga változtathassa a keretek méretét

A JavaScript is hatékonyan együtt tud mûködni a keretekkel. De mielõtt ebbe belemélyednénk, építsünk fel egy kereteket tartalmazó HTML oldalt!

<HTML>
<FRAMESET ROWS="50%,*">
  <FRAME SRC="pld032.htm" NAME="keret1">
  <FRAME SRC="pld033.htm" NAME="keret2">
</FRAMESET>
</HTML>

Ez a kód két keretet eredményez az oldalon (ezzel a linkkel, rögtön ki is próbálhatod). Kereteket a <FRAMESET> HTML elemmel készíthetünk, amelyen belül jelen esetben a ROWS attribútumot használtuk. Ez azt jelenti, hogy a kereteink sorokban fognak elhelyezkedni, a ROWS attribútumot követõ százalékos arányoknak megfelelõen. Itt most " 50%,* " szerepel, azaz az elsõ keret a böngészõ ablakának felét fogja elfoglalni, míg a másik keret a fennmaradó részt (ezt jelenti ugyanis a *). Ha nem százalékosan, hanem pixelekben szeretnénk megadni a keretek méretét, akkor ezt is megtehetjük a százalékjel elhagyásával.

Sorok helyett oszlopokba is rendezhetjük a kereteket, ekkor a ROWS attribútum helyett COLS attribútumot használjunk. A kettõt természetesen kombinálhatjuk is:

<HTML>
<FRAMESET ROWS="50%,*">
  <FRAMESET COLS="33%,33%,*">
    <FRAME SRC="pld035.htm">
    <FRAME SRC="pld035.htm">
    <FRAME SRC="pld035.htm">
  </FRAMESET>
  <FRAMESET COLS="50%,*">
    <FRAME SRC="pld035.htm">
    <FRAME SRC="pld035.htm">
  </FRAMESET>
</FRAMESET>
</HTML>

Ennek a kódnak az eredményét itt láthatod!

Keretek kezelése JavaScript-ben

Térjünk vissza az elsõ példára, amelyben két keretet hoztunk létre. Hogyan jelenik meg ez a JavaScript szemszögébõl? Mint mindent, a JavaScript a kereteket is egy logikus hierarchiába rendezi. A hierarchia legtetején maga a böngészõ ablaka van. Ezt az ablakot bontottuk fel két keretre. Az ablak a két keret szülõje, míg a keretek a gyermekek. Így az ablakra parent néven, míg a keretekre azon a néven hivatkozhatunk, amit a <FRAME> HTML elem NAME attribútumában megadtunk (a példánkban ez keret1 és keret2). A JavaScript lehetõvé teszi, hogy:

  • a szülõ ablak hozzáférjen a gyerekeihez, azaz a keretekhez
  • a keretek hozzáférjenek a szülõjükhöz
  • a keretek hozzáférjenek egymáshoz

Az elsõ eset azt jelenti, hogy a szülõ ablakhoz tartozó HTML kódban (gyakorlatilag ez hozza létre a kereteket) van egy JavaScript kódunk, amely a keretekben szeretne bizonyos mûveleteket elvégezni, például megjeleníteni valamit. Ekkor egyszerûen a keret nevének felhasználásával férhetünk hozzá a kerethez. Pl.:

keret2.document.write("Ezt a sort a szülõ ablak írta ki!");

A második esetre akkor lehet szükség, ha el akarjuk távolítani a kereteket az ablakból. Ez úgy történik, hogy a kereteket létrehozó dokumentum helyére (amely éppen a szülõ ablakhoz tartozó dokumentum) újat töltünk be. A szülõ ablakhoz parent névvel férhetünk hozzá egy gyerek ablakból (keretbõl). Új dokumentum betöltéséhez nem kell mást tennünk, mint hogy a szülõ ablak location.href (amelyrõl a második fejezet végén volt szó) mezõjéhez új értéket rendelünk. Ezt a következõ utasítással tehetjük meg:

.href = "http://...";

A harmadik eset a leggyakoribb, hiszen legtöbbször azt akarjuk, hogy a keretek együttmûködjenek. Tegyük fel, hogy a feladatunk az, hogy írassunk ki JavaScript segítségével egy szöveget az elsõ kerethez tartozó dokumentumból a második keretbe. Az egyes keretek között nincs kapcsolat, amely azt jelenti, hogy az egyik keretbõl nem hívhatjuk közvetlenül a másikat, hanem mivel a többi keretet csak a szülõ látja, így azon keresztül hivatkozhatunk rájuk:

parent.keret2.document.write("Ezt az elsõ keretbõl írattuk ki");

Végezetül nézzünk meg egy nagyobb lélegzetû példát!

A kereteket létrehozó dokumentum legyen a következõ!

<HTML>
<FRAMESET ROWS="50%,*">
  <FRAME SRC="pld037.htm" NAME="menu">
  <FRAMESET COLS="50%,*">
    <FRAME SRC="pld038.htm" NAME="dokumentum1">
    <FRAME SRC="pld039.htm" NAME="dokumentum2">
  </FRAMESET>
</FRAMESET>
</HTML>

A kód ezt eredményezi. Betölti a pld037.htm (menü) oldalt a felsõ menu nevû keretbe, míg két példa HTML oldalt a dokumentum1 és dokumentum2 keretekbe.

A pld037.htm (menü) kódja:

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- Elrejtés

function betolt(url, keret){
  if (keret == "dokumentum1") parent.dokumentum1.location.href=url;
  else parent.dokumentum2.location.href=url;
}

function betolt2(elso_url, masodik_url){
  betolt(elso_url, 'dokumentum1');
  betolt(masodik_url, 'dokumentum2');
}
function szincsere(ujszin, keret){
  if (keret == "dokumentum1")
    parent.dokumentum1.document.bgColor=ujszin;
  else
    parent.dokumentum2.document.bgColor=ujszin;
}
// -->
</SCRIPT>
</HEAD>

<BODY>

<CENTER>
<H1>Menü</H1>
<A HREF="javascript:betolt('pld0310.htm','dokumentum1')">Betölt egy
új dokumentumot az elsõ keretbe</A><BR>

<A HREF="javascript:betolt('pld0310.htm','dokumentum2')">Betölt egy
új dokumentumot a második keretbe</A><BR>

<A HREF="javascript:szincsere('#00FFFF','dokumentum1')">Háttérszín
cseréje az elsõ keretben</A><BR>

<A HREF="javascript:szincsere('#FFFF00','dokumentum2')">Háttérszín
cseréje a második keretben</A><BR>

<A HREF="javascript:betolt2('pld0311.htm','pld0311.htm')">Dokumentum
betöltése egyszerre két keretbe</A><BR>
</CENTER>

</BODY>
</HTML>

A pld037.htm tartalmaz három függvényt. Mindet a HREF attribútumból hívtuk meg, azaz ekkor a linkre kattintva a függvény hívódik meg, és nem új dokumentum töltõdik be. A betolt függvény két paramétert vár, egy új HTML dokumentum címét, és annak a keretnek nevét (dokumentum1 vagy dokumentum2), ahová be kell tölteni az új dokumentumot. Ezt úgy érjük el, hogy a választott keret location objektumának href mezõjét felülírjuk az új címmel. Feltételes elágazást (if - else) használunk a keret kiválasztására, azaz ha a keret paraméter a dokumentum1 értéket kapja, akkor a parent.dokumentum1.location.href a hivatkozás, ellenkezõ esetben parent.dokumentum2.location.href. Akinek ez még nem lenne ismerõs, az ne ijedjen meg. A késõbbiekben errõl részletesen szó lesz!

A szincsere függvény felépítése nagyon hasonló, csak itt az új szín értékét ill. a keret nevét adjuk át, és természetesen a document objektum bgColor értékének adunk új értéket.

A betolt2 függvény egyszerre két keretbe tölt be új HTML oldalt. Ezt úgy értük el, hogy a függvény törzsében meghívtuk a betolt függvényt elõbb az elsõ keret nevével (dokumentum1) ill. a megfelelõ címmel, majd meghívtuk újra, csak most a második keret nevével (dokumentum2). Maga a betolt2 függvény önmagában viszont csak két paramétert vár, az elsõ keretbe betöltendõ ill. a második keretbe betöltendõ oldalak címét, amelyeket a betolt függvénynek adunk át.

A példa alapján látható, hogy JavaScript segítségével sokkal összetettebb feladatok is megoldhatók kereteket tartalmazó oldalakon, mint ha csak a HTML-ben meglévõ lehetõségeket használhatjuk (gondolok itt a TARGET attribútumra).

<< Vissza a tartalomhoz

Tovább a negyedik fejezethez >>