dagblog.
← Archiv

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.

Verze na Medium

Související články

Související epizody CZ Podcastu