oder doch JavaScript?? feststellen ob User JS aktiviert hat...
Rainer
- php
Hallo Forumer,
ich muss auf einer PHP-Seite feststellen ob JavaScript beim User aktiviert ist um eine unterschiedliche Navigation zu laden.
In der Seite sieht das dann ungefähr so aus:
<?
//$jsscript 0 = ohne JS, $jsscript 1 = mit JS
if($jsscript=="0"){
echo"Navi ohne JS";
}else{
echo"Navi mit JS";
}
?>
Wie komme ich nun an die Variable $jsscript??
Gruss an alle fleissigen Forumer
Rainer
Hallo Rainer,
ich muss auf einer PHP-Seite feststellen ob JavaScript beim User aktiviert ist um eine unterschiedliche Navigation zu laden.
Das geht nicht, jedenfalls nicht direkt.
Die erste Seite kann Serverseitig noch nicht entscheiden ob sie Clientseitig Script vorfinden wird oder nicht. (Solltest du das dafür nötige Modul mod_hellsehen zufällig vorfinden bitte kurze Nachricht ;-)
Ab der zweiten Seite geht das, dazu hilft der Browser indem er zwei verschieden Seiten anfordert.
Server liefert Seite aus ------>Browser zeigt Seite an und stellt fest
ob Script an oder aus.
Browser/user fordert neue Seite an
<------Anfrage mit Script
<------Anfrage ohne Script
jetzt kann der Server
unterschiedliche Seiten ------>
liefern. ------>
Der Code auf der ersten Seite kann z.b. so Aussehen:
<script> document.write('<a href="seite2.php?jsscript=1">'); </script>
<noscript><a href="seite2.php?jsscript=0"></noscript>
Mit dieser Technik kannst du natürlich auch gleich unterschiedliche Inhalte auf der ersten Seite erzeugen.
Die IMHO günstigste Variante wäre ein Clientseitiger Redirekt im <head> bereich:
<noscript><meta http-equiv="refresh" content="0; URL=http://deinedomain.de/seite.php?ohnejs=1/">
</noscript>
Das ist leider und unverständlicherweise nicht valide, geht aber in allen Browsern die ich bisher getestet habe.
Der umgekehrte Weg, nämlich mittels <script>location.replace("seite.php?mitjs=1"); </script> ist robuster, belästigt(Ladezeit!) aber den grösseren Teil der Besucher mit dem Redirekt.
Gruss,
Carsten
Hi Carsten!
Die IMHO günstigste Variante wäre ein Clientseitiger Redirekt im <head> bereich:
<noscript><meta http-equiv="refresh" content="0; URL=http://deinedomain.de/seite.php?ohnejs=1/">
</noscript>
Das ist leider und unverständlicherweise nicht valide, geht aber in allen Browsern die ich bisher getestet habe.
Mit welchen hast Du denn getestet. Ich habe es bisher mit NN 4.7x, IE 5.0 Opera 5.12/13, NN 6.x und Mozilla 0.9.9 probiert. Hier ging es.
Der umgekehrte Weg, nämlich mittels <script>location.replace("seite.php?mitjs=1"); </script> ist robuster, belästigt(Ladezeit!) aber den grösseren Teil der Besucher mit dem Redirekt.
Warum ist das robuster?
Generell kann ich Dir nur 110%ig zustimmen! Finde die Methode mit noscript und refresh auch am besten, aus den von Dir genannten Gründen: Nur die wenigen User, die JS deaktiviert haben werden weitergeleitet.
Leider ist das - wie Du schon gesagt hast - nicht valide. Habe das bisher nur mit http://validator.w3.org getestet. Kennst Du oder sonst jemand ein RFC o.ä. in dem diese Konstruktion missbilligz wird? Würde mich sehr interessierten!
Clemens
Hallo Clemens!
Warum ist das robuster?
Stell dir einen Browser(oder Suchmaschinenspider) vor, der weder Script noch den <meta refresh...> beherrscht. Bei der Scriptumleitung landet der auf der richtigen Seite, bei der Metaumleitung sind doch wieder <noscript> Bereiche (nun aber nur noch als Notnagel, z.b.: klick hier für richtige Seite.) nötig.
Gruss,
Carsten
Hi,
über einen recht "umständlichen" Weg ist dies auch _fast_ direkt zu realisieren.
Nach der Anfrage sendest Du die Seite OHNE JS-Menu zurück, bettest aber im <head>-Bereich folgendes Script ein:
<script> top.location.href="index.php?js=1"; </script>
Dann wird bei den Usern, die JS aktiviert haben, sofort eine neue Seiten-Anfrage gesendet. Übergabe-String auswerten und das Script sendet die Version mit JS zurück.
Viele Grüße...
Alex :)