Stavá se, že potřebujete pracovat s více okny prohlížeče. Většinou tato okna slouží jako upoutávky na právě probíhající akce, reklamu ad. Víte ale, jak takovým oknům vdechnout inteligenci?

Asi každý už zažil situaci, kdy se mu na obrazovce začaly hromadit automaticky otevíraná okna. Nebudu mluvit o stránkách, které mají tuto činnost přímo v popisu práce. Naopak, jestliže si přidáte automaticky generované okno do svých stránek, bylo by slušné jej po sobě zavřít.

Než se pustím do vysvětlování co a jak, podívejte se na příklad toho, co mám na mysli. Při otevření hlavních stránek je automaticky otevřeno i okno reklamní, které se dostane nad všechna okna (v případě, že použitý prohlížeč je Internet Explorer 4+ nebo Netscape 3+). Pokud není reklamní okno zavřeno uživatelem, je zavřeno automaticky při opuštění hlavního okna – buď odchodem na jinou adresu nebo uzavřením.

Otevírání reklamního okna je zajištěno skriptem v hlavičce hlavního okna:

<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!–
 reklama=window.open("2.htm","Upoutavka",’screenY=20, screenX=20, top=0, left=20, titlebar=no, toolbar=no, location=no, status=no, menubar=no, scrollbars=no, resizable=yes, width=450, height=400′);   // otevření reklamního okna
 function zavri()   // funkce pro zavření reklamního okna
  {
  if (typeof(reklama.document) == "object")   // test, existuje-li požadovaný objekt (okno)
   {
    reklama.close()   // zavření okna
   }
  }
// –>
</SCRIPT>

O parametrech příkazu window.open bylo napsáno již mnoho, nebudu proto jednotlivé položky rozebírat. Za zmínku stojí snad handler reklama. Pomocí tohoto jména můžeme k nově otevřenému oknu přistupovat a pracovat s ním.

V hlavičce je uvedena i funkce zavri (zavření reklamního okna). Funkce je volána událostí OnUnload těla stránky. Při volání window.open není pro přehlednost testována verze prohlížeče. Otevření okna podporuje Internet Explorer 3 a Netscape 4. Je jen na vás, rozhodnete-li se testovat obě verze nebo povolíte pouze verzi 4.

<body OnUnload="zavri();"&gt

Nejprve je otestováno, existuje-li okno (zde využijete handler reklama) a v kladném připadě je okno zavřeno. Tato kontrola je nutná pro bezchybný chod skriptu i v případě, že bylo reklamní okno zavřeno ručně uživatelem.

Když je reklamní okno otevíráno v hlavičce hlavní stránky, interpretace těla stránky toto reklamní okno většinou „pošle“ do pozadí. Pak se ovšem ztrácí hlavní smysl celého našeho snažení. Naštěstí existuje v Internet Exploreru (verze 4 a výše) i Netscape (verze 3 a výše) funkce window.focus.

<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!–
 verze = parseInt(navigator.appVersion);   // zjištění verze prohlížeče
 if(verze >= 4) {   // pokračovat od verze 4 výše
  if (typeof(reklama.document) == "object") reklama.focus();   // existuje-li okno, nastaví ho na aktivní
 }
// –>
</SCRIPT>

Skript je velice podobný se skriptem pro zavření okna. Nejprve zkontroluje verzi aktuálního prohlížeče. Je-li verze větší nebo rovna 4, pokračuje kontrolou existence okna a jeho „zaměřením“. V okamžiku, kdy dostane okno focus (stane se aktivní), je přesunuto nad všechna ostatní okna. Využití funkce focus není z příkladu patrné. Skutečné využití nastane v případě, kdy pokračuje interpretace hlavního okna i po zobrazení reklamního okna (tedy rozsáhlé stránky).

Možná vás zarazilo, proč píšu o tom, že funkci focus podporuje Netscape již od verze 3 a ve výše uvedeném skriptu je testována verze 4. Je to dáno zvláštní shodou okolností. Funkce window.open je podporována Internet Explorerem od verze 3, zatímco Netscape ji zná až od verze 4.

Sám tento způsob používám na stránkách, kdy je otevíráno okno anket a dále již uživatele neobtěžuje. Samozřejmě je možno použít i jiný způsob, ale když už jsem nucen zvláštní okno použít, je slušnost jej za sebou zavřít. Popsaná funkce může obsahovat modifikace například pomocí cookies (bylo-li již okno dnes otevřeno). Je již na vás, do jaké hloubky jste ochotni se věnovat skriptům.

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