O webu
Detekce zapnutého JavaScriptu

Při psaní webové aplikace, kde se používá JavaScript, může být vhodné jeho přítomnost detekovat a tu informaci umět přenášet na server (např. do PHP skriptu).

HTML a CSS

Značka <noscript>

V HTML existuje značka <noscript>, jejíž obsah se zobrazí při vypnutém skriptování.

<noscript>
	<p>Zapněte si JavaSript!
</noscript>

Pokud se do této značky umístí třeba tag <body> (nebo nějaký jiný obal celé stránky) a bude mít třídu .no-js, otevírá se možnost všechny styly, co se mají projevit při vypnutém JS, začínat právě „.no-js“.

Značka <body>volitelnou počáteční i uzavírací značku, takže se není třeba trápit s tím, že by se sama neotevřela.

JavaScript

Obrácený postup je naopak JavaScriptem přidat obalovému elementu třídu „.js“; popřípadě element do HTML zapsat s „.no-js“ a tu mu skriptem odebrat.

<body class="no-js">
<script>document.body.className = ''</script>

U tagu <body> je výhodné, že má volitelnou počáteční i koncovou značku, není třeba tedy řešit nějaké otevírání/uzavření, oboje umí udělat sám. Na začátku stránky tak lze použít i:

<script>document.write("<body class=js>")</script>

Konstrukce document.write je způsob, jak vypisovat obsah stránky, který má být přístupný jen s JS.

Použití v CSS

Využití třídy .js nebo naopak .no-js je prosté:

.js .schovat-pri-js {display: none}

Nebo…

.zobrazit-bez-js {display: none}
.no-js .zobrazit-bez-js {display: block}

Na straně serveru

Serverový skript se nemá jak spolehlivě dozvědět o (ne)zapnutém JS. Dát mu tuto informaci možné je, ale musí se použít oklika z řešeních výše. Například:

  1. Ihned JavaScriptem/<noscript>em přesměrovat stránku na URL s ?js=ano.
    <noscript>
      <meta http-equiv="refresh" content="1;URL=?js=ne">
    </noscript>

    Nebo v JS:

    <script>window.location = "?js=ano"</script>

    Po zjištění je nutné přesměrování odstranit, jinak vznikne nekonečná smyčka.

  2. Uložit pomocí JS cookie a při následném načtení nějaká stránky kontrolovat její existenci.
  3. Pingnout serverový skript JavaScriptem/<noscript>em.

Zjištění zapnutého JavaScriptu v PHP potom bude fungovat na základě kontroly $_GET["js"], popř. $_COOKIE["js"].