S objevením se rámů se objevil i jev, který se nazývá „framing“. Jedná se o to, že se mnohým autorům stránek nelíbí stav, kdy stránky cizích autorů se objevují jako jedno okno uvnitř rámů někoho jiného. Čtenář stránek má potom dojem, že cizí stránky jsou nedílnou součástí jiného webu. Dochází tak vlastně k „chlubení se cizím peřím“, a přitom je to právně nepostižitelné. Článek vysvětluje podstatu problému, i jak se bránit.

Abyste lépe pochopili, co je to framing, zahrajeme si nejdříve na pachatele. Řekněme, že já jako autor budu mít stránky, kde v jednom okně bude Interval.cz. K tomu mi stačí, abych napsal definici rámů nějak takto:

<html>
<head>
<title>Ukázka framingu</title>
</head>
<body>
<frameset rows=“70,*“>
    <frame src=“moje_lista.html“>
    <frame src=“http://www.interval.cz“>
</frameset>
</body>
</html>

Takto definované stránku jsou ukázkou typického framingu. Rám se skládá z horní lišty, kde může být moje pěkně graficky uvedené logo. Pod titulní lištou je obsah Intervalu.cz. Pokud jsem slušný grafik a logo upoutá pozornost, může ve čtenáři vzniknout mylný dojem, že stránky časopisu jsou dílem téhož autora.

Z tohoto důvodu se mnoha autorům nelíbí, když někdo jejich stránku zahrnuje do svých rámů. Existují, zejména v americkém světě, různé aktivity na protest proti tomuto počínání. Z toho vyplývá jeden závěr – pokud chcete jinou stránku zahrnout do svých rámů, je dobré mít předem svolení autora.

Lidé se brání všelijak. Někteří umísťují na svou stránku loga s nápisy „I don’t want to be framed“ (Nechci být umístěn do rámu). Jiní se snaží vymýšlet nejrůznější zábrany, jak znemožnit orámovat jejich stránku. Někdy jsou ovšem tak úspěšní, že totálně znemožní čtení jejich stránky všem čtenářům.

Dnes vám ukáži JavaScript, který podle mého je ideálním řešením. Pracuje tak, že pokud se někdo stránku pokusí vložit do svých rámců, zruší rámy a natáhne stránku do celého okna. Tím pádem o vás žádný čtenář nepřijde a zároveň se nedáte orámovat.

Předem ovšem napíšu, že je potřeba tento skript nedávat na stránky, které sami chcete mít v rámu, jinak zruší i vaše rámy. Můžete jej ovšem přidat do stránky, kde své rámy definujete. Zde je ukázka stránky s použitým JavaScriptem na obranu proti orámování:

<html>
<head>
<title>Ukázka obrany proti framingu</title>
</head>
<body>
<script type=“text/javascript“ language=“JavaScript“><!–
    if (top.length != self.length)
      top.location.href = self.location.href;
// –>
</script>
<– zde je obsah Vaší stránky –>
</body>
</html>

Vysvětlení funkce je jednoduché. Ve hře jsou dvě okna, která JavaScript pojmenovává „top“ a „self“. Okno „self“ je okno, ve kterém jsme spustili tento skript. Okno „top“ je „táta všech oken v rámu“, tedy to největší okno, které ohraničuje všechna podřízená, menší okna v rámech.

Pro lepší pochopení se podívejte na níže uvedený náčrtek. Okno „top“ je okno, které obsahuje všechna tři uvedená okna v sobě a všechny je ohraničuje. Pokud je náš skript nahrán řekněme třeba do „okna 2“, potom okno „self“ bude totéž co „okno 2“.

Náčrt rozložení oken
Náčrt rozložení oken

Vlastnost length spočítá, kolik oken je podřízených, počítá i sám sebe. Pokud nepoužíváme rámy, tak dostaneme jedničku. Pokud jsou pod ním ještě nějaké rámy, dostaneme počet podřízených oken.

Nejdříve tedy pomocí zápisu if(top.length == self.length) zkontrolujeme, jestli stránka, ze které je spuštěn skript, má stejný počet podřízených oken. To je možné jenom tehdy, pokud okno „top“ a okno „self“ znamenají jedno a totéž okno. Jinak řečeno, pokud stránka, ve které jsme spustili skript, není spuštěna v podřízeném okně nějakého rámu.

Na druhé straně díky této krkolomné podmínce nevadí, pokud naše stránka obsahuje definici rámů. Náš skript bude bez problémů funkční i v této situaci.

Pokud se zjistí, že stránka je spuštěna v rámu, provede se druhý řádek top.location.href = self.location.href. Tento řádek zruší rámy, protože do nejvyššího okna rámu (tedy do okna „top“) nahraje stránku (zápis top.location znamená adresu stránky), která je teď v aktuálním okně (tedy okně „self“).

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