JavaScriptin window-olion open-metodilla voidaan avata uusia ikkunoita, sekä hallita näiden ominaisuuksia.
window.open('OSOITE','NIMI','OMINAISUUDET');
Useammat ikkunan ominaisuusilmoitukset ovat on/off -asetuksia, jotka voidaan määritellä muutamalla eri tavalla. Seuraavassa esimerkissä kolme eri tapaa ilmoittaa samat ominaisuudet:
window.open('esim.htm','Esimerkki','resizable');
window.open('esim.htm','Esimerkki','resizable=1');
window.open('esim.htm','Esimerkki','resizable=yes');
// varmista aina, että ikkunan koko on muunneltavissa!
Yo. esimerkin mukaisesti kaikki muut Boolean-asetukset saisivat negatiivisen arvon (0, no).
Muut kuin on/off -asetukset saavat arvokseen kuvapisteitä merkitsevän luvun. Ikkunansäätäjäsivulla näet yleisimmät käytettävät ominaisuudet ja voit käytännössä kokeilla uuden ikkunan eri ominaisuuksien vaikutusta.
Uuteen ikkunaan linkittäessä on varmistettava, ettei JS sotke linkin normaalia toimivuutta tilanteissa joissa JS-tukea ei ole käytössä. Seuraa kaksi esimerkkiä, joissa navigoinnin toimivuus on varmistettu:
Seuraava esimerkki on, sekä turvallinen, että (X)HTML Strict -yhteensopiva tapa linkittää yksittäiseen uuteen ikkunaan:
<a
href="../code/js2/huom3a.htm"
onclick="this.target='Testi';
window.open('','Testi','resizable=1,width=300,height=300');
return true;">turvallinen linkki uuteen ikkunaan</a>
Yo. koodi tulostuu dokumenttiin seuraavasti: turvallinen linkki uuteen ikkunaan. Ilman JS-tukea linkki aukeaa samaan ikkunaan.
Tämäkin (X)HTML Transitional -yhteensopiva versio on turvallinen:
<a
href="../code/js2/huom3a.htm"
target="Testi2"
onclick="window.open('','Testi2','resizable=1,width=300,height=300');
return true;">myös turvallinen linkki uuteen ikkunaan</a>
Yo. koodi tulostuu dokumenttiin seuraavasti: myös turvallinen linkki uuteen ikkunaan. Ilman JS-tukea linkki aukeaa uuteen ikkunaan.
Huomaa seuraavat seikat yo. esimerkeissä:
target, joka esiintyy esimerkeissä aina kahdesti) olisi sama.resizable on päällä, koska kun yksi tai useampi ominaisuus ilmoitetaan, niin ilmoittamatta jätetyt ominaisuudet ovat pois päältä.Uuden ikkunan avaamistoimenpiteestä kannattaa tehdä tarvittaessa kutsuttava aliohjelma, eli funktio, mikäli sivustossa avattavia ikkunoita on useampia ja niiden ominaisuudet ovat yhtenäisiä. Funktio kannattaa aina sijoittaa ulkoiseen JS-tiedostoon, jos useat sivut kutsuvat sitä. Yksinkertaisuuden vuoksi esimerkissä sijoitamme funktion SCRIPT-elementtiin (HEAD-elementin lapseksi), jolloin sitä voidaan kutsua vain samasta dokumentista:
<script type="text/javascript">
//<![CDATA[
var vakio; /* esitellään muuttuja funktion ulkopuolella,
jotta siihen voitaisiin viitata globaalisesti */
function vakioAkkuna() {
/* tehdään vakio-muuttujasta window-olio ja sijoitetaan
siihen open-metodi toivotuilla ominaisuuksilla varustettuna: */
vakio = window.open('','senNimi','resizable=1,width=300,height=300');
vakio.focus(); //pyydetään lopuksi ikkunnalle kohdistus
//window-olion focus-metodilla
}
//]]>
</script>
Sitten kutsutaan funktiota aina tarvittaessa:
<a
href="../code/js2/huom3a.htm"
onclick="this.target='senNimi';vakioAkkuna();">
aina samat ominaisuudet</a>
Esimerkkilinkkimme tulostuu seuraavasti: aina samat ominaisuudet. Huomioi, että kohteeksi asetetaan funktiossa määritetty ikkunan nimi. Mikäli funktiota kutsuttaisiin eri linkistä ikkunan ollessa avoinna, niin sen sisältö vaihtuisi ja se saisi kohdistuksen.
Edellisessä esimerkissä tehtiin ikkunalle "kahva", eli sijoitettiin open-metodi vakio nimisen muuttujan arvoksi. Kahvalla viittasimme kyseiseen ikkunaan ja pyydettiin sille kohdistus focus-metodilla. Kahvan avulla voimme siis kysellä ja muutella ikkunan ominaisuuksia, tai suorittaa window-olion metodeja, kuten ikkunan sulkeminen. Seuraavassa käsittelemme muutamaa esimerkkiä ikkunan kahvan käytöstä.
JS:n avulla ikkunat suljetaan close-metodilla. Tässä suljemme uuden ikkunan avaavasta scriptistä käsin. Ikkunan sulkemista avatusta ikkunasta käsin käsitellään eri paikassa. Käytämme edellisen esimerkin kahvaa viittaamaan suljettavaan ikkunaan:
<a href="javascript:if(vakio==undefined||vakio.closed){
alert('Ehkä et avannut vakio-ikkunaa, tai suljit sen jo aikaisemmin?')}
else {vakio.close()}">sulje vakio.</a>
Yo. esimerkissä ennen close-metodin suoritusta tarkastetaan onko ikkuna avattuna tai suljettuna. Mikäli vakio-muuttujan arvo on määrittelemätön (undefined) ikkunaa ei olla vielä avattu. window.closed -ominaisuudella taas (joka palauttaa Boolean-arvon true/false) voimme tarkastaa onko ikkuna suljettuna. Mikäli toinen ehdoista täyttyy niin suoritetaan vain alert-metodi. Muussa tapauksessa ikkuna on auki ja suoritetaan vain close-metodi.
Esimerkkilinkkimme tulostuu seuraavasti: sulje vakio. Kokeile linkkiä vakio-ikkuna avattuna/suljettuna. Voit myös selvittää onko selaimen muistissa vakio-nimistä ikkunaoliota ajamalla seuraava käsky selaimesi osoiterivillä (kopioi ja paina Enter):
javascript:alert(vakio);
Kahva löytyy mikäli funktioita on kutsuttu ja tällöin metodi palauttaa tiedon oliosta (object). Muussa tapauksessa funktiota ei olla kutsuttu (vakio-muuttuja on ainoastaan esitelty, mutta sitä ei olla alustettu), joten metodi palauttaa undefined-arvon.
Summa: tässä varmistetaan että olio on olemassa ennen kuin siihen viitataan, jotta vältyttäisiin ohjelmavirheeltä.
Käytämme ikkunan automaattiseen sulkemiseen window-olion setTimeout-metodia. Määrittelemme myös uuden funktion ja kahvan:
<script type="text/javascript">
//<![CDATA[
var kahva2;
function AvaaJaSulje() {
kahva2 = window.open('','senNimi','resizable=1,width=300,height=300');
setTimeout('kahva2.close()',4000);
}
//]]>
</script>
Sitten kutsumme AvaaJaSulje-funktiotamme linkistä:
<a
href="../code/js2/huom5a.htm"
onclick="this.target='senNimi';AvaaJaSulje();">
automaattisesti sulkeutuva ikkuna</a>
Linkkimme tulostuu dokumenttiin seuraavasti: automaattisesti sulkeutuva ikkuna. Kun funktiota kutsutaan setTimeout-metodin ensimmäinen parametri ajetaan vasta sitten kun toisena parametrina annettu aikajakso on kulunut, joten tässä tapauksessa metodi sulkee ikkunan neljän sekunnin kuluttua.
Huomaa seuraavat seikat yo. esimerkissä:
focus-metodilla) avaamallemme ikkunalle, kuten edellisessä, joten jos senNimi on jo avattuna, niin ikkunan sisältö päivittyy (ja sulkeutuukin) taustalla.Tässä esimerkissä määrittelemme uuden funktion ja kahvan uuden ikkunan sisällön automaattiseen vaihtoon.
<script type="text/javascript">
//<![CDATA[
var kahva3;
function AvaaJaVaihda() {
kahva3 = window.open('','uusiNimi','resizable=1,width=600,height=450');
setTimeout('kahva3.location.href = "../code/example.htm"',5000);
}
//]]>
</script>
Sitten AvaaJaVaihda-funktion kutsu:
<a
href="../code/js2/huom3a.htm"
onclick="this.target='uusiNimi';AvaaJaVaihda();">
automaattinen sisällön vaihto</a>
Linkkimme tulostuu dokumenttiin seuraavasti: automaattinen sisällön vaihto. Funktiota kutsuttaessa avataan uusi ikkuna, jonka sisältö vaihdetaan toiseen dokumenttiin viiden sekunnin kuluttua. Tässä scriptissä avattavan ikkunan nimi on eri (uusiNimi) kuin edellisissä, joten scriptin toiminta ei vaikuta edellisten esimerkkien ikkunoihin lainkaan.
Lisää erilaisia toteutuksia löytyy vaikeimmista JavaScript-esimerkeistä (Popup-ikkunat).