Mit PHP prüfen ob JavaScript im Client aktiviert ist

jspit

Lounge-Member
Bekanntermaßen steht die Information ob JavaScript im Client aktiviert ist nicht direkt für PHP zur Verfügung. Die Information kann nützlich sein, wenn man z.B. nicht mit Weichen arbeiten will und zwei Versionen "mit" und "ohne" Javascript pflegen möchte.
Da diese Information nur clientseitig zur Verfügung steht, muss man überlegen wie sie zum Server übertragen wird.
Bei der hier beschriebenen Lösung wird bei aktivierten Javascript die Seite erneut aufgerufen und dabei per GET die Information mitgegeben:
PHP:
session_start();
if(isset($_GET['js_aktiv']))$_SESSION['js_aktiv'] = ($_GET['js_aktiv'] == '1');
if($_SESSION['js_aktiv'] === NULL) {
  echo '<script type="text/javascript">window.location="'.$_SERVER['PHP_SELF'].'?js_aktiv=1&'.htmlspecialchars(SID).'";</script>';
  $_SESSION['js_aktiv'] = false;
}
echo $_SESSION['js_aktiv'] ? "JS Aktiv<br>" : "JS nicht aktiv<br>";

Die Information wird in einer Session Variable gespeichert, damit diese besucherabhängig zur Verfügung steht.
$_SESSION['js_aktiv'] ist true wenn Javascript beim Client aktiviert ist und false wenn es deaktiviert ist.
Werden die Regeln für die Weitergabe der Session-ID beachtet, steht die Information ob Javascript beim Client aktiv ist auch für weitere Seiten zur Verfügung.
 
Zuletzt bearbeitet:
Und was ist wenn ich das Skript mit skript.php?js_aktiv=1 aufrufe, aber kein JS installiert habe?

Ich finde die Frage auch berechtigt. So wird der Script ausgetrickst. Abhilfe schafft eine zusätzliche Sessionvariable:
PHP:
session_start();
if(isset($_GET['js_aktiv']) AND isset($_SESSION['aufruf']) AND ($_SESSION['aufruf'] == "ok")) { 
  $_SESSION['js_aktiv'] = ($_GET['js_aktiv'] == '1');
  }
if($_SESSION['js_aktiv'] === NULL) {
  $_SESSION['aufruf'] = "ok";
  echo '<script type="text/javascript">window.location="'.$_SERVER['PHP_SELF'].'?js_aktiv=1&'.htmlspecialchars(SID).'";</script>';
  $_SESSION['js_aktiv'] = false;
}
else $_SESSION['aufruf'] = "";
echo $_SESSION['js_aktiv'] ? "JS Aktiv<br>" : "JS nicht aktiv<br>";

Es gibt noch eine einfache (und sichere) Alternative, wenn Formulare mit POST benutzt werden. Dafür wird eine Zeile im ersten (Login)Formular spendiert:
Code:
  <form action="session.php" method="POST" onsubmit="this.js_aktiv.value=1;"> 
  <input type="hidden" name="js_aktiv" value="0" />
     :
  </form>
Sofern Javascript aktiviert ist wird mit onsubmit value auf 1 gesetzt, wenn nicht bleibt es 0.
Die Information steht nach dem Absenden des Formulars zur Verfügung und wird in einer Session Variable gespeichert, damit diese wieder besucherabhängig zur Verfügung steht:
PHP:
session_start();
if(isset($_POST['js_aktiv']))$_SESSION['js_aktiv'] = ($_POST['js_aktiv'] == '1');
if($_SESSION['js_aktiv'] === NULL)$_SESSION['js_aktiv'] = false;

LG jspit
 
Zuletzt bearbeitet:
Hab gerade mir diesen Thread angesehen. Auch wenn er schon ziemlich alt war, trotzdem nützlich. Danke an jspit :D
 
Zurück
Oben