V minulém článku jsem ukázal, jak můžete inteligenci oken využít, dnes se budu věnovat více obecným principům v přístupu k oknům.

Možnosti ovládání okna by byly moc chudé, pokud by existoval jen starý známý focus(). Přidávám proto popis dalších metod a vlastností oken. Řeč bude i o rodičích a potomcích. Nebudou nás zajímat jejich vlastnosti, pouze vzájemný vztah, proto pro názornost poslouží jednoduchý obrázek a příklad.

Vztahy rodič - potomek

Odkaz na potomka

Jestliže chci s libovolným objektem (v tomto případě s oknem) pracovat, musím znát referenci (handler, odkaz) na něj. S tímto odkazem pak mohu pracovat. Jak takový odkaz získat? Při prvním otevírání okna je to jednoduché, v JavaScriptu to vypadá takto: hand=window.open("otevirane_okno.htm","nazev_okna");. Tímto způsobem jsem získal referenci hand na Potomka a mohu se pomocí ní kdekoli ve skriptu Rodiče odkazovat na otevřené okno (Potomka).

<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!–
 hand=window.open("otevirane_okno.htm","nazev_okna");   // otevření okna Potomek a získání reference na něj
// –>
</SCRIPT>

Parametry funkce windows.open() jsou dostatečně známy a byly mnohokrát popsány i na Intervalu. Snad jen poznámka na okraj: jedním z parametrů je i fullscreen="yes". Způsobí otevření okna na celou obrazovku (mód KIOSEK) bez všech ovládacích prvků, nejen celoobrazovkový režim známý po stisku F11. Mnoho (zejména nezkušených) uživatelů by si s nastalou situací nemuselo vědět rady, používejte proto tento parametr obezřetně.

Odkaz na rodiče

A co dělat v případě, že se nacházím v okně Potomek a chci zjistit, kdo je Rodič? Skriptem (opět JavaScript) rodic=window.opener; umístěným v okně Potomek získáte referenci rodic na okno, ze kterého byl Potomek otevřen – tudíž odkaz na jeho rodiče!

<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!–
 rodic=window.opener;   // získání reference na Rodice
// –>
</SCRIPT>

Jestliže mám referenci na okno (ať už Rodiče nebo Potomka), mohu provést změnu adresy (url), přepsání url, reload stránky, aktivaci (deaktivaci) okna, zavřít okno a získat jméno okna. Dále je možno okno posunovat, měnit jeho velikost, rolovat obsah.

Získání jména

Jméno je jednoznačný identifikátor okna, většinou jej však nepoužijete. K získání jména slouží vlastnost name. Tento skript umístěný v okně Potomek vypíše jméno aktuálního okna a jméno Rodiče:

rodic=window.opener;   // reference na Rodiče
alert(„Moje jméno: „+self.name);   // jméno aktuálního okna
alert(„Jméno rodiče: „+rodic.name);   // jméno okna Rodiče

S největší pravděpodobností je jméno Rodiče prázdný řetězec. Tento fakt není důvod k panice, k manipulaci s oknem slouží handler…

Aktivace, deaktivace okna

Již v minulém článku bylo popisováno použití metody focus. Komplementární funkcí k window.focus() je metoda window.blur() – posunutí okna do pozadí.

rodic=window.opener;   // reference na Rodiče
rodic.focus();   // poslání okna do popředí
rodic.blur();   // poslání okna do pozadí

Reload stránky

Někdy se vyskytne potřeba změnit obsah stránky v libovolném okně. K tomu slouží metoda reload

self.location.reload();   // provede reload stránky v aktuálním okně (i z proxy)
self.location.reload(true);   // provede reload stránky v aktuálním okně bezpodmínečně ze serveru

Změna a přepsání URL

Přepsáním URL v zadaném okně způsobí, že je aktuální stránka nahrazena stránkou (adresou) novou a aktuální adresa nebude v historii. Změna URL je prostá změna – původní adresa v historii bude.

rodic=window.opener;   // reference na Rodiče
rodic.location.href=“2_2.htm“;   // změní url Rodiče
rodic.location.replace(„2_2.htm“);   // přepíše url Rodiče

Postřehy ze zkoušení. Přepisování url adresy se projevuje jinak v Internet Exploreru a jinak v Netscape: zatímco v Internet Exploreru je přepsána pouze poslední adresa, ostatní zůstávají v historii. V případě Netscape je situace jiná. Při přepsání je vymazána celá historie (testováno v prohlížečích Netscape 4.05, Internet Explorer 5.0).

Zavření okna

Nejběžněji používaná metoda. Syntaxe je prostá:

rodic=window.opener;   // reference na Rodiče
rodic.close();   // zavře okno Rodiče

Ostatní zmiňované metody

Další metody nejsou používány nijak často, přesto stojí za zmínku.

window.moveTo(x,y);   // posun okna na souřadnice x,y (pixel)
window.moveBy(x,y);   // posun okna o x,y (pixel)
window.resizeTo(x,y);   // změna rozměru okna na x*y (pixel)
window.resizeBy(x,y);   // změna rozměru okna o x, y (vpravo, dolů) (vlevo, nahoru)
window.scrollTo(x,y);   // rolování na souřadnice x,y
window.scrollBy(x,y);   // rolování o souřadnice x,y

Použité skripty jsou funkční v Internet Explorer 4 a výše a Netscape 3 a výše. Přestože je mnoho z těchto funkcí velmi zajímavých, platí, že méně je někdy více.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět