JavaScript a sdílení proměnných mezi okny
Občas řeším opravdu velice zvláštní problémy. Bylo
třeba sdílet určitou hodnotu(identifikátor nutný pro odeslaní rodičovského formuláře s nastavením z dceřiného okna) mezi rodičovským
oknem a oknem dceřiným. V podstatě jsou tři známé a používané metody.
- hodnotu si předám v parametru a zpracuji na serveru
- hodnotu si předám v URL(GET) a získám rozborem URL na klientu
- hodnotu z rodičovského okna získám přes formulář využitím objektu
opener
Nyní se dostanu k první větě otázkou:”Proč zvláštní problémy ?”. Rád zkouším nové cesty a proto,
že jsem lenoch a nechtělo se mi patlat s ani jednou z předešlých metod, pohlédnul jsme
se po jiném řešeni. Napadlo mě, že je možné rodičovskému oknu, lépe řečeno objektu window,
zaregistrovat proměnnou, která by se naplnila při načtení stránky nebo kdykoliv jindy. K této proměnné
je pak možno přistupovat přes objekt opener.
Řešení má tu výhodu oproti ostatním uvedeným, že je menší v rozsahu klientského
skriptu, není třeba provádět na straně serveru a ani vytvářet element
input s atributem hidden, který bychom četli.
Řešení nepřímo ukazuje i další výhodu a to, že místo proměnné bychom mohli
zaregistrovat ovladač události(vlastní funkci), který by tak byl dosažitelný
(čti volatelný) s dceřiného okna.
Praktická ukázka kódu
Rodičovské okno:
//registrace globalni proměnné objektu window
window.foo = "acme";
Dceřiné okno:
//načtení proměnné rodičovského okna
var parentValueFoo = opener.window.foo;
Jak je vidět řešení je opravdu velice jednoduché, ale naprosto
vyhovující. V jednoduchosti je síla.
Související články
Související epizody CZ Podcastu
- #217 · Ivo Lukačovič
O Windy, JavaScriptu a budování firem.
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi a Filemon o novinkách v Javě 6 a webových frameworcích.