Nová stránka v JavaScriptu

V některých případech se může hodit vytvořit skriptem novou stránku. Je sice možné měnit DOM té stávající, ale to způsobí přepsání původního obsahu a s tím spojenou nemožnost návratu.

Po různém testování jsem došel k následujícímu kódu:

var html = "<p>HTML obsah stránky</p>";
var stranka = window.open("", "_self");
stranka.document.write(html);

Živá ukázka

Bohužel v prohlížečích Chrome a Opera nefunguje funkce zpět. V IE/Edge, Firefoxu a staré Opeře řešení funguje, jak má.

Akce Zpět (JS akce history.back()) v prohlížečích vycházejících z jádra Blink nevede na stránku, ze které se nová stránka vytvořila, ale už na tu předchozí.

Případně není vůbec kam jít zpět:

Neaktivní ikona pro funkci Zpět

Jediná možnost, jak se vrátit, je tak pomocí reloadu:

location.reload()

V takovém případě už je ale rovnou možné přepsat DOM původní stránky:

Přepsání celého obsahu stránky

Pokud je cílem, aby zůstal společný obsah stránky jako hlavička, navigace a podobně, jde změnit pouze obsahový <div>:

document.getElementById("obsah").innerHTML = "HTML kód";

Pro změnu celého obsahu při zachování stylů a skriptů připojených v <head> je ideální přepsat <body>:

document.body.innerHTML = "HTML kód";

Kompletní změnu zajistí přepsání documentElementu (značka <html>):

document.documentElement.innerHTML = "HTML kód";

Objekt history a pushState

V Chrome a nové Opeře je nejspíš jediná možnost, jak docílit nové stránky s možností návratu, použít history.pushState.

Takové řešení funguje až od IE 10 a je pracnější na realisaci, ale dokáže zajistit, že různý obsah bude na různých URL, což je čistší řešení, než když toho na jedné URL může být víc – například kvůli odkazování.

Nové okno

Další možnost je obsah otevřít v novém vyskakovacím okně – to půjde alespoň zavřít. Takový postup se často využívá pro přípravu stránky k tisku:

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Fixní postranní panel

Jak vytvořit fixovaný banner?

JavaScriptové řešení prvku, který při rolování zůstane stále viditelný.

Aktivování/deaktivování okna

Zachycení aktivování a deaktivování okna v JS

V JavaScriptu lze relativně snadno reagovat na aktivování nebo deaktivování okna/záložky/tabu.

Baterka v CSS a JavaScriptu

Vytvoření efektu baterky v CSS a JS

Jak jednoduše vytvořit na stránce efekt baterky? Tedy ztmavit web a prohlížet ho jakýmsi průzorem.

Test existence obrázku JavaScriptem

Ověření existence obrázku pomocí JS

Jak JavaScriptem ověřit existenci obrázku?

Načtení obrázku, až když je potřeba

Zpožděné načtení obrázku, až když je potřeba

Kromě potřeby nahrát obrázek dopředu (preload), aby byl v době použití 100% připravený, může být potřeba opačná – načíst jej, až v momentě, kdy je potřeba. Z důvodu nemrhání datovým přenosem.

Komentáře