it-swarm.com.de

Wie erkenne ich, ob JavaScript deaktiviert ist?

Heute Morgen wurde in einem Post gefragt, wie viele Leute JavaScript deaktivieren. Dann begann ich mich zu fragen, welche Techniken verwendet werden könnten, um festzustellen, ob der Benutzer sie deaktiviert hat.

Kennt jemand einige kurze/einfache Möglichkeiten, um festzustellen, ob JavaScript deaktiviert ist? Ich möchte Sie warnen, dass die Website nicht ordnungsgemäß funktioniert, ohne dass der Browser JS aktiviert hat.

Irgendwann würde ich sie zu Inhalten umleiten wollen, die ohne JS funktionieren, aber ich brauche diese Erkennung als Platzhalter, um zu beginnen.

643
MikeJ

Ich gehe davon aus, dass Sie versuchen, zu entscheiden, ob Sie JavaScript-optimierten Inhalt bereitstellen möchten. Die besten Implementierungen verschlechtern sich sauber, sodass die Site immer noch ohne JavaScript arbeitet. Ich gehe auch davon aus, dass Sie serverseitige Erkennung meinen, anstatt das <noscript> -Element aus einem ungeklärten Grund zu verwenden.

Es gibt keine gute Möglichkeit, eine serverseitige JavaScript-Erkennung durchzuführen. Alternativ ist es möglich, ein Cookie mit JavaScript zu setzen und dieses Cookie dann mit serverseitigem Scripting bei nachfolgenden Seitenaufrufen zu testen. Dies ist jedoch nicht geeignet, um zu entscheiden, welche Inhalte geliefert werden sollen, da Besucher ohne das Cookie nicht von neuen Besuchern oder Besuchern, die Cookies blockieren, unterschieden werden können.

280
Marc Gear

Ich möchte meine .02 hier hinzufügen. Es ist nicht 100% kugelsicher, aber ich denke, es ist gut genug.

Das Problem mit dem bevorzugten Beispiel für die Einrichtung einer Art Meldung "Diese Site funktioniert nicht so gut ohne Javascript" ist, dass Sie dann sicherstellen müssen, dass Ihre Site ohne Javascript einwandfrei funktioniert. Und wenn Sie diesen Weg einmal eingeschlagen haben, werden Sie feststellen, dass die Site bei deaktiviertem JS kugelsicher sein sollte, und das ist eine ganze Menge zusätzlicher Arbeit.

Also, was Sie wirklich wollen, ist eine "Weiterleitung" zu einer Seite, auf der "JS einschalten, dumm" steht. Natürlich können Sie Meta-Weiterleitungen nicht zuverlässig ausführen. Also, hier ist der Vorschlag:

<noscript>
    <style type="text/css">
        .pagecontainer {display:none;}
    </style>
    <div class="noscriptmsg">
    You don't have javascript enabled.  Good luck with that.
    </div>
</noscript>

... wobei alle des Inhalts Ihrer Site mit einem div der Klasse "pagecontainer" umschlossen sind. Das CSS im noscript-Tag blendet dann den gesamten Seiteninhalt aus und zeigt stattdessen die Nachricht "no JS" an, die Sie anzeigen möchten. Dies ist eigentlich, was Google Mail zu tun scheint ... und wenn es gut genug für Google ist, ist es gut genug für meine kleine Website.

353
hairbo

noscript Blöcke werden ausgeführt, wenn JavaScript deaktiviert ist, und werden normalerweise zum Anzeigen von alternativen Inhalten verwendet, die Sie in JavaScript generiert haben, z.

<script type="javascript">
    ... construction of ajaxy-link,  setting of "js-enabled" cookie flag, etc..
</script>
<noscript>
    <a href="next_page.php?nojs=1">Next Page</a>
</noscript>

Benutzer ohne JS erhalten den Link next_page - Sie können hier Parameter hinzufügen, damit Sie auf der nächsten Seite wissen, ob sie über einen JS-/Nicht-JS-Link gekommen sind, oder versuchen, ein Cookie über JS zu setzen Fehlen davon impliziert, dass JS deaktiviert ist. Beide Beispiele sind ziemlich trivial und offen für Manipulationen, aber Sie haben die Idee.

Wenn Sie eine rein statistische Vorstellung davon haben möchten, wie viele Ihrer Benutzer Javascript deaktiviert haben, können Sie Folgendes tun:

<noscript>
    <img src="no_js.gif" alt="Javascript not enabled" />
</noscript>

überprüfen Sie dann in Ihren Zugriffsprotokollen, wie oft dieses Bild abgerufen wurde. Eine etwas grobe Lösung, die Ihnen jedoch prozentual eine gute Idee für Ihre Anwenderbasis bietet.

Der oben beschriebene Ansatz (Bildverfolgung) eignet sich nicht für Nur-Text-Browser oder solche, die js überhaupt nicht unterstützen. Wenn sich Ihre Nutzerbasis also hauptsächlich in diesen Bereich bewegt, ist dies möglicherweise nicht der beste Ansatz.

196
ConroyP

Das hat bei mir funktioniert: Es leitet einen Besucher weiter, wenn Javascript deaktiviert ist

<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>
46
Ernie13

Wenn Sie ein Formular haben (z. B. ein Anmeldeformular) und Ihr serverseitiges Skript wissen muss, ob der Benutzer JavaScript aktiviert hat, können Sie Folgendes tun:

<form onsubmit="this.js_enabled.value=1;return true;">
    <input type="hidden" name="js_enabled" value="0">
    <input type="submit" value="go">
</form>

Dies ändert den Wert von js_enabled auf 1, bevor das Formular gesendet wird. Wenn Ihr serverseitiges Skript eine 0 erhält, gibt es kein JS. Wenn es eine 1 bekommt, JS!

44
Andrew Hedges

Ich würde vorschlagen, dass Sie umgekehrt vorgehen, indem Sie unauffälliges JavaScript schreiben.

Stellen Sie sicher, dass die Funktionen Ihres Projekts für Benutzer mit deaktiviertem JavaScript funktionieren. Wenn Sie fertig sind, implementieren Sie die Verbesserungen der JavaScript-Benutzeroberfläche.

https://en.wikipedia.org/wiki/Unobtrusive_JavaScript

42
cllpse

Verwenden Sie eine .no-js-Klasse für den Body und erstellen Sie Stile ohne Javascript, die auf der übergeordneten Klasse von .no-js basieren. Wenn Javascript deaktiviert ist, werden alle Stile angezeigt, die kein Javascript sind. Wenn JS unterstützt wird, wird die Klasse .no-js ersetzt, sodass alle Stile wie gewohnt angezeigt werden.

 document.body.className = document.body.className.replace("no-js","js");

trick in HTML5 Boilerplate verwendet http://html5boilerplate.com/ durch Modernizr, aber Sie können eine Zeile von Javascript verwenden, um die Klassen zu ersetzen

noscript-Tags sind in Ordnung, aber warum sollten Sie zusätzliche Inhalte in Ihrem HTML-Code haben, wenn dies mit CSS möglich ist?

33
Abuzzy

<noscript> ist nicht einmal notwendig und nicht zu vergessen wird in XHTML nicht unterstützt.

Arbeitsbeispiel:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
    <title>My website</title>
    <style>
      #site {
          display: none;
      }
    </style>
    <script src="http://code.jquery.com/jquery-latest.min.js "></script>
    <script>
      $(document).ready(function() {
          $("#noJS").hide();
          $("#site").show();
      });
    </script>
</head>
<body>
    <div id="noJS">Please enable JavaScript...</div>
    <div id="site">JavaScript dependent content here...</div>
</body>
</html>

In diesem Beispiel wird die Site angezeigt, wenn JavaScript aktiviert ist. Wenn nicht, wird die Meldung "Bitte aktivieren Sie JavaScript" angezeigt. Der beste Weg, um zu testen, ob JavaScript aktiviert ist, ist, einfach zu versuchen und JavaScript zu verwenden! Wenn es funktioniert, ist es aktiviert, wenn nicht, dann ist es nicht ...

32
de Raad

Sie können ein einfaches JS-Snippet verwenden, um den Wert eines ausgeblendeten Felds festzulegen. Wenn Sie zurückschreiben, wissen Sie, ob JS aktiviert war oder nicht.

Sie können auch versuchen, ein Popup-Fenster zu öffnen, das Sie schnell schließen (das jedoch möglicherweise sichtbar ist).

Sie haben auch das NOSCRIPT-Tag, mit dem Sie Text für Browser mit deaktiviertem JS anzeigen können.

13
rslite

Schauen Sie sich das Noscript-Tag an.

<script type="text/javascript">
...some javascript script to insert data...
</script>
<noscript>
   <p>Access the <a href="http://someplace.com/data">data.</a></p>
</noscript>
13
anon

nur ein bisschen zäh, aber (Hairbo gab mir die Idee)

CSS:

.pagecontainer {
  display: none;
}

JS:

function load() {
  document.getElementById('noscriptmsg').style.display = "none";
  document.getElementById('load').style.display = "block";
  /* rest of js*/
}

HTML:

<body onload="load();">

  <div class="pagecontainer" id="load">
    Page loading....
  </div>
  <div id="noscriptmsg">
    You don't have javascript enabled. Good luck with that.
  </div>

</body>

würde das auf jeden fall funktionieren oder? auch wenn das noscript-tag nicht unterstützt wird (nur einige css erforderlich) kennt jemand eine non-css-lösung?

13
borrel

Das noscript-Tag funktioniert gut, erfordert jedoch jede zusätzliche Seitenanforderung, um weiterhin nutzlose JS-Dateien bereitzustellen, da es sich bei noscript im Wesentlichen um eine clientseitige Prüfung handelt.

Sie könnten ein Cookie mit JS setzen, aber wie jemand anderes darauf hingewiesen hat, könnte dies fehlschlagen. Im Idealfall möchten Sie in der Lage sein, die JS-Clientseite zu erkennen und ohne Verwendung von Cookies eine Sitzungsserverseite für diesen Benutzer festzulegen, die angibt, dass JS aktiviert ist.

Eine Möglichkeit besteht darin, ein 1x1-Image mithilfe von JavaScript dynamisch hinzuzufügen, wobei das src-Attribut tatsächlich ein serverseitiges Skript ist. Dieses Skript speichert nur in der aktuellen Benutzersitzung, in der JS aktiviert ist ($ _SESSION ['js_enabled']). Sie können dann ein leeres 1x1-Bild an den Browser zurückgeben. Das Skript wird nicht für Benutzer ausgeführt, für die JS deaktiviert ist, und daher wird $ _SESSION ['js_enabled'] nicht festgelegt. Für weitere Seiten, die diesem Benutzer zur Verfügung gestellt werden, können Sie entscheiden, ob Sie alle Ihre externen JS-Dateien einbeziehen möchten, aber Sie möchten immer die Prüfung einbeziehen, da einige Ihrer Benutzer möglicherweise das NoScript Firefox-Add-On verwenden oder über JS verfügen aus einem anderen Grund vorübergehend deaktiviert.

Wahrscheinlich möchten Sie diese Prüfung irgendwo in der Nähe des Endes Ihrer Seite einfügen, damit die zusätzliche HTTP-Anforderung das Rendern Ihrer Seite nicht verlangsamt.

12
David Wees

Fügen Sie dies dem HEAD -Tag jeder Seite hinzu.

<noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
</noscript>

Also hast du:

<head>
    <noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
    </noscript>
</head>

Vielen Dank an Jay.

12
the_seeker_who

Da ich dem Browser immer etwas geben möchte, das es wert ist, angeschaut zu werden, benutze ich oft diesen Trick:

Erstens ist jeder Teil einer Seite, für dessen ordnungsgemäße Ausführung JavaScript erforderlich ist (einschließlich passiver HTML-Elemente, die durch getElementById-Aufrufe usw. geändert werden), so zu verwenden, wie er ist, vorausgesetzt, dass kein JavaScript verfügbar ist. (Entworfen, als ob es nicht da wäre)

Alle Elemente, für die JavaScript erforderlich wäre, platziere ich in einem Tag wie folgt:

<span name="jsOnly" style="display: none;"></span>

Dann verwende ich am Anfang meines Dokuments .onload oder document.ready innerhalb einer Schleife von getElementsByName('jsOnly'), um .style.display = ""; festzulegen und die JS-abhängigen Elemente wieder einzuschalten. Auf diese Weise müssen Nicht-JS-Browser die JS-abhängigen Teile der Site nie sehen. Wenn sie diese haben, wird sie sofort angezeigt, wenn sie bereit ist.

Wenn Sie erst einmal mit dieser Methode vertraut sind, können Sie Ihren Code relativ einfach für beide Situationen hybridisieren, obwohl ich erst jetzt mit dem noscript -Tag experimentiere und erwarte, dass er einige zusätzliche Vorteile bietet.

11
Brian

Eine übliche Lösung besteht darin, das Meta-Tag in Verbindung mit noscript zu aktualisieren und den Server zu benachrichtigen, wenn JavaScript deaktiviert ist.

<!DOCTYPE html>
<html lang="en">
    <head>
        <noscript>
            <meta http-equiv="refresh" content="0; /?javascript=false">
        </noscript>
        <meta charset="UTF-8"/>
        <title></title>
    </head>
</html>

Im obigen Beispiel leitet der Browser bei deaktiviertem JavaScript in 0 Sekunden zur Homepage der Website weiter. Zusätzlich wird der Parameter javascript = false an den Server gesendet.

Ein serverseitiges Skript wie node.js oder PHP kann dann den Parameter analysieren und feststellen, dass JavaScript deaktiviert ist. Anschließend kann eine spezielle Nicht-JavaScript-Version der Website an den Client gesendet werden.

9
Umesh Patil

Dies ist die "sauberste" Lösungs-ID:

<noscript>
    <style>
        body *{ /*hides all elements inside the body*/
            display: none;
        }
        h1{ /* even if this h1 is inside head tags it will be first hidden, so we have to display it again after all body elements are hidden*/
            display: block;
        }
    </style>
    <h1>JavaScript is not enabled, please check your browser settings.</h1>
</noscript>
9
Alpha2k

Wenn Javascript deaktiviert ist, wird Ihr clientseitiger Code sowieso nicht ausgeführt. Ich gehe also davon aus, dass Sie diese Informationen serverseitig verfügbar haben möchten. In diesem Fall ist noscript weniger hilfreich. Stattdessen würde ich eine versteckte Eingabe haben und Javascript verwenden, um einen Wert einzufügen. Wenn der Wert nach Ihrer nächsten Anfrage oder Ihrem nächsten Postback vorhanden ist, wissen Sie, dass Javascript aktiviert ist.

Seien Sie vorsichtig mit Dingen wie Noscript, bei denen bei der ersten Anfrage möglicherweise Javascript deaktiviert ist, bei zukünftigen Anfragen jedoch aktiviert wird.

8
Joel Coehoorn

Sie können beispielsweise document.location = 'Java_page.html' verwenden, um den Browser auf eine neue, mit Skripten beladene Seite umzuleiten. Wenn Sie nicht umleiten, ist JavaScript nicht verfügbar. In diesem Fall können Sie entweder auf CGI-Ro-Utines zurückgreifen oder den entsprechenden Code zwischen die Tags einfügen. (HINWEIS: NOSCRIPT ist nur in Netscape Navigator 3.0 und höher verfügbar.)

credit http://www.intranetjournal.com/faqs/jsfaq/how12.html

5
Brad8118

Eine Technik, die ich in der Vergangenheit verwendet habe, ist die Verwendung von JavaScript zum Schreiben eines Sitzungscookies, das lediglich als Flag für die Aktivierung von JavaScript fungiert. Der serverseitige Code sucht dann nach diesem Cookie und ergreift gegebenenfalls Maßnahmen, wenn es nicht gefunden wird. Natürlich setzt diese Technik voraus, dass Cookies aktiviert sind!

4
John Topley

Ich denke, Sie könnten ein Image-Tag in ein Noscript-Tag einfügen und sich die Statistiken ansehen, wie oft Ihre Site und wie oft dieses Image geladen wurde.

4
MrVolley

Es wurden bereits Beispiele veröffentlicht, die eine gute Erkennungsmöglichkeit darstellen. Sie müssen jedoch darauf hinweisen, dass die Website nicht ordnungsgemäß funktioniert, wenn der Browser JS aktiviert hat. Sie fügen im Grunde genommen ein Element hinzu, das irgendwie auf der Seite erscheint, zum Beispiel die 'Pop-ups' bei Stack Overflow, wenn Sie ein Abzeichen verdienen, mit einer entsprechenden Meldung, und entfernen diese dann mit etwas Javascript, das ausgeführt wird, sobald die Seite geladen wird ( und ich meine das DOM, nicht die ganze Seite).

4
roryf

Suchen Sie nach Cookies mit einer reinen serverseitigen Lösung, die ich eingeführt habe hier und suchen Sie dann nach Javascript, indem Sie ein Cookie mit Jquery.Cookie ablegen und dann auf diese Weise nach Cookies suchen und sowohl nach Cookies als auch nach Javascript

3
pouya

Erkenne es in was? JavaScript? Das wäre unmöglich. Wenn Sie es nur zu Protokollierungszwecken verwenden möchten, können Sie eine Art Tracking-Schema verwenden, bei dem jede Seite über JavaScript verfügt, das eine Anforderung für eine spezielle Ressource (wahrscheinlich eine sehr kleine gif oder eine ähnliche) erstellt. Auf diese Weise können Sie nur den Unterschied zwischen eindeutigen Seitenanforderungen und Anforderungen für Ihre Tracking-Datei erkennen.

3
Hank Gay

Ich möchte meine Lösung hinzufügen, um verlässliche Statistiken darüber zu erhalten, wie viele echte Benutzer meine Website besuchen, wobei JavaScript für die Gesamtzahl der Benutzer deaktiviert ist. Die Prüfung wird nur einmal pro Sitzung durchgeführt, mit den folgenden Vorteilen:

  • Benutzer, die 100 Seiten oder nur 1 besuchen, werden mit jeweils 1 gezählt. Dies ermöglicht es, sich auf einzelne Benutzer zu konzentrieren, nicht auf Seiten.
  • Bricht den Seitenfluss, die Struktur oder die Semantik nicht auf
  • Konnte Benutzeragenten protokollieren. Dies ermöglicht es, Bots von Statistiken auszuschließen, wie z. B. Google Bot und Bing Bot, bei denen JS normalerweise deaktiviert ist! Könnte auch IP, Zeit etc ... protokollieren.
  • Nur eine Prüfung pro Sitzung (minimale Überlastung)

Mein Code verwendet PHP, MySQL und JQuery mit Ajax, kann aber an andere Sprachen angepasst werden:

Erstellen Sie eine Tabelle in Ihrer DB wie folgt:

CREATE TABLE IF NOT EXISTS `log_JS` (
  `logJS_id` int(11) NOT NULL AUTO_INCREMENT,
  `data_ins` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `session_id` varchar(50) NOT NULL,
  `JS_ON` tinyint(1) NOT NULL DEFAULT '0',
  `agent` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`logJS_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Fügen Sie dies zu jeder Seite hinzu, nachdem Sie session_start () oder eine gleichwertige Methode (jquery erforderlich) verwendet haben:

<?  if (!isset($_SESSION["JSTest"]))
    { 
        mysql_query("INSERT INTO log_JS (session_id, agent) VALUES ('" . mysql_real_escape_string(session_id()) . "', '" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']). "')"); 
        $_SESSION["JSTest"] = 1; // One time per session
        ?>
        <script type="text/javascript">
            $(document).ready(function() { $.get('JSOK.php'); });
        </script>
        <?
    }
?>

Erstelle die Seite JSOK.php so:

<?
include_once("[DB connection file].php");   
mysql_query("UPDATE log_JS SET JS_ON = 1 WHERE session_id = '" . mysql_real_escape_string(session_id()) . "'");
3
Unbroken

Sie erkennen nicht, ob der Benutzer Javascript deaktiviert hat (Server-Seite oder Client). Stattdessen setzen Sie voraus, dass Javascript deaktiviert ist, und erstellen Ihre Webseite mit deaktiviertem Javascript. Dies vermeidet die Notwendigkeit von noscript, die Sie auf jeden Fall vermeiden sollten, da sie nicht richtig funktioniert und nicht erforderlich ist.

Erstellen Sie zum Beispiel einfach Ihre Site und sagen Sie <div id="nojs">This website doesn't work without JS</div>

Dann führt Ihr Skript einfach document.getElementById('nojs').style.display = 'none'; aus und erledigt sein normales JS-Geschäft.

3
Explosion Pills

In einigen Fällen kann es ausreichend sein, dies rückwärts zu tun. Fügen Sie eine Klasse mit Javascript hinzu:

// Jquery
$('body').addClass('js-enabled');

/* CSS */
.menu-mobile {display:none;}
body.js-enabled .menu-mobile {display:block;}

Dies kann zu Wartungsproblemen bei komplexen Objekten führen, ist jedoch eine einfache Lösung für einige Probleme. Anstatt zu erkennen, wann es nicht geladen ist, müssen Sie es nur nach dem Zeitpunkt des Ladens stylen.

3

Ich habe einen anderen Ansatz mit CSS und Javascript selbst herausgefunden.
Dies ist nur, um mit Klassen und IDs zu basteln.

Das CSS-Snippet:
1. Erstellen Sie eine CSS-ID-Regel und nennen Sie sie #jsDis.
2. Verwenden Sie die Eigenschaft "content", um nach dem BODY-Element einen Text zu generieren. (Sie können dies nach Belieben stylen).
3 Erstellen Sie eine zweite CSS-ID-Regel, nennen Sie sie #jsEn und stilisieren Sie sie. (Der Einfachheit halber habe ich meiner #jsEn-Regel eine andere Hintergrundfarbe gegeben.

<style>
#jsDis:after {
    content:"Javascript is Disable. Please turn it ON!";
    font:bold 11px Verdana;
    color:#FF0000;
}

#jsEn {
    background-color:#dedede;
}

#jsEn:after {
    content:"Javascript is Enable. Well Done!";
    font:bold 11px Verdana;
    color:#333333;
}
</style>

Das JavaScript-Snippet:
1. Erstellen Sie eine Funktion.
2. Holen Sie sich die BODY ID mit getElementById und weisen Sie sie einer Variablen zu.
3. Ändern Sie mit der JS-Funktion 'setAttribute' den Wert des ID-Attributs des BODY-Elements.

<script>
function jsOn() {
    var chgID = document.getElementById('jsDis');
    chgID.setAttribute('id', 'jsEn');
}
</script>

Der HTML-Teil.
1. Nennen Sie das Elementattribut BODY mit der ID #jsDis.
2. Fügen Sie das Ereignis onLoad mit dem Funktionsnamen hinzu. (jsOn ()).

<body id="jsDis" onLoad="jsOn()">

Aufgrund des BODY-Tags wurde die ID von #jsDis vergeben:
- Wenn Javascript aktiviert ist, ändert es selbst das Attribut des BODY-Tags.
- Wenn Javascript deaktiviert ist, wird der CSS-Regeltext 'content:' angezeigt.

Sie können mit einem #wrapper-Container oder mit jedem DIV, der JS verwendet, herumspielen.

Ich hoffe, das hilft, auf die Idee zu kommen.

3
Chris Pesoa

Um Benutzer zu zwingen, JavaScripts zu aktivieren, lege ich für jeden Link das Attribut 'href' auf dasselbe Dokument fest, wodurch der Benutzer benachrichtigt wird, JavaScripts zu aktivieren oder Firefox herunterzuladen (wenn er nicht weiß, wie JavaScripts aktiviert werden sollen). Ich habe die tatsächliche Link-URL für das Attribut 'name' von Links gespeichert und ein globales On-Click-Ereignis definiert, das das Attribut 'name' liest und die Seite dort umleitet.

Das funktioniert gut für meine Nutzerbasis, wenn auch ein bisschen faschistisch;).

3
Jan Sahin

Warum setzen Sie nicht einfach einen hijacked onClick () -Ereignishandler, der nur ausgelöst wird, wenn JS aktiviert ist, und fügen damit einen Parameter (js = true) an die angeklickte/ausgewählte URL an (Sie könnten auch eine Dropdown-Liste erkennen) und ändern Sie den Wert, indem Sie ein ausgeblendetes Formularfeld hinzufügen. Wenn der Server diesen Parameter sieht (js = true), weiß er, dass JS aktiviert ist, und führt dann Ihre ausgefallene Logik serverseitig aus.
Der Nachteil dabei ist, dass Sie feststellen müssen, dass es sich bei dem ersten Besuch einer Website, eines Lesezeichens, einer URL oder einer von einer Suchmaschine generierten URL um einen neuen Benutzer handelt. Suchen Sie also nicht nach dem NVP an die URL angehängt und der Server müsste auf den nächsten Klick warten, um festzustellen, ob der Benutzer JS aktiviert/deaktiviert hat. Ein weiterer Nachteil ist, dass die URL auf der Browser-URL landet und wenn dieser Benutzer diese URL mit einem Lesezeichen markiert, wird der NVP js = true angezeigt, auch wenn der Benutzer JS nicht aktiviert hat, obwohl der Server dies beim nächsten Klick tun würde Seien Sie weise, um zu wissen, ob der Benutzer JS noch aktiviert hatte oder nicht. Seufz .. das macht Spaß ...

3
FirstSOURCE

code innerhalb von _<noscript>_ -Tags wird ausgeführt, wenn im Browser kein js aktiviert ist. Wir können noscript -Tags verwenden, um msg anzuzeigen und JS wie folgt einzuschalten ._<noscript> <h1 style="text-align: center;">enable Java script and reload the page</h1> </noscript>_, während der Inhalt unserer Website im Körper verborgen bleibt. wie nachstehend

_<body>
<div id="main_body" style="display: none;">
website content.
</div>
</body>
_

wenn JS jetzt aktiviert ist, können Sie den Inhalt in Ihrem main_body wie folgt sichtbar machen

_<script type="text/javascript">
document.getElementById("main_body").style.display="block";
</script>
_
2
Pavan Kumar

Das Hinzufügen einer Aktualisierung in Meta innerhalb von Noscript ist keine gute Idee.

  1. Da das noscript-Tag nicht XHTML-kompatibel ist

  2. Der Attributwert "Refresh" ist kein Standard und sollte nicht verwendet werden. "Aktualisieren" nimmt dem Benutzer die Kontrolle über eine Seite. Die Verwendung von "Aktualisieren" führt zu einem Fehler in den Richtlinien für den barrierefreien Zugriff auf Webinhalte von W3C --- Referenz http://www.w3schools.com/TAGS/att_meta_http_equiv.asp .

2
Gaurav Talwar

Wenn Sie nur nachverfolgen möchten, ob js aktiviert ist, können Sie den Status mit einer Ajax-Routine speichern. Zum Beispiel protokolliere ich alle Besucher/Besuche in einer Reihe von Tabellen. Das Feld JSenabled kann auf den Standardwert FALSE gesetzt werden, und die Ajax-Routine würde es auf TRUE setzen, wenn JS aktiviert ist.

2
birchy

Hier ist die Wendung! Es kann Client-Browser mit aktiviertem Javascript geben, die JS-kompatible Browser verwenden. Aus welchem ​​Grund auch immer, Javascript funktioniert im Browser nicht (Beispiel: Firewall-Einstellungen). Laut Statistik passiert dies alle 1 von 93 Szenarien. Der Server erkennt also, dass der Client Javascript ausführen kann, aber tatsächlich nicht!

Als Lösung schlage ich vor, dass wir ein Cookie in der Client-Site setzen und es dann vom Server lesen. Wenn das Cookie gesetzt ist, funktioniert JS einwandfrei. Irgendwelche Gedanken?

Hier ist ein PHP Skript, das einmal eingefügt werden kann, bevor eine Ausgabe generiert wird. Es ist nicht perfekt, aber es funktioniert in den meisten Fällen gut genug, um zu vermeiden, dass Inhalte oder Code bereitgestellt werden, die vom Client nicht verwendet werden. Die Kommentare in der Kopfzeile erläutern, wie es funktioniert.

<?php
/*****************************************************************************
 * JAVASCRIPT DETECTION                                                      *
 *****************************************************************************/

// Progressive enhancement and graceful degradation are not sufficient if we
// want to avoid sending HTML or JavaScript code that won't be useful on the
// client side.  A normal HTTP request will not include any explicit indicator
// that JavaScript is enabled in the client.  So a "preflight response" is
// needed to Prompt the client to provide an indicator in a follow-up request.
// Once the state of JavaScript availability has been received the state of
// data received in the original request must be restored before proceding.
// To the user, this handshake should be as invisible as possible.
// 
// The most convenient place to store the original data is in a PHP session.
// The PHP session extension will try to use a cookie to pass the session ID
// but if cookies are not enabled it will insert it into the query string.
// This violates our preference for invisibility.  When Javascript is not
// enabled the only way to effect a client side redirect is with a "meta"
// element with its "http-equiv" attribute set to "refresh".  In this case
// modifying the URL is the only way to pass the session ID back.
//
// But when cookies are disabled and JavaScript is enabled then a client side
// redirect can be effected by setting the "window.onload" method to a function
// which submits a form.  The form has a "method" attribute of "post" and an
// "action" attribute set to the original URL.  The form contains two hidden
// input elements, one in which the session ID is stored and one in which the
// state of JavaScript availability is stored.  Both values are thereby passed
// back to the server in a POST request while the URL remains unchanged.  The
// follow-up request will be a POST even if the original request was a GET, but
// since the original request data is restored, the containing script ought to
// process the request as though it were a GET.

// In order to ensure that the constant SID is defined as the caller of this
// script would expect, call session_start if it hasn't already been called.
$session = isset($_SESSION);
if (!$session) session_start();

// Use a separate session for Javascript detection.  Save the caller's session
// name and ID.  If this is the followup request then close the caller's
// session and reopen the Javascript detection session.  Otherwise, generate a
// new session ID, close the caller's session and create a new session for
// Javascript detection.
$session_name = session_name();
$session_id = session_id();
session_write_close();
session_name('JS_DETECT');
if (isset($_COOKIE['JS_DETECT'])) {
    session_id($_COOKIE['JS_DETECT']);
} elseif (isset($_REQUEST['JS_DETECT'])) {
    session_id($_REQUEST['JS_DETECT']);
} else {
    session_id(sha1(mt_Rand()));
}
session_start();

if (isset($_SESSION['_SERVER'])) {
    // Preflight response already sent.
    // Store the JavaScript availability status in a constant.
    define('JS_ENABLED', 0+$_REQUEST['JS_ENABLED']);
    // Store the cookie availability status in a constant.
    define('COOKIES_ENABLED', isset($_COOKIE['JS_DETECT']));
    // Expire the cookies if they exist.
    setcookie('JS_DETECT', 0, time()-3600);
    setcookie('JS_ENABLED', 0, time()-3600);
    // Restore the original request data.
    $_GET = $_SESSION['_GET'];
    $_POST = $_SESSION['_POST'];
    $_FILES = $_SESSION['_FILES'];
    $_COOKIE = $_SESSION['_COOKIE'];
    $_SERVER = $_SESSION['_SERVER'];
    $_REQUEST = $_SESSION['_REQUEST'];
    // Ensure that uploaded files will be deleted if they are not moved or renamed.
    function unlink_uploaded_files () {
        foreach (array_keys($_FILES) as $k)
            if (file_exists($_FILES[$k]['tmp_name']))
                unlink($_FILES[$k]['tmp_name']);
    }
    register_shutdown_function('unlink_uploaded_files');
    // Reinitialize the superglobal.
    $_SESSION = array();
    // Destroy the Javascript detection session.
    session_destroy();
    // Reopen the caller's session.
    session_name($session_name);
    session_id($session_id);
    if ($session) session_start();
    unset($session, $session_name, $session_id, $tmp_name);
    // Complete the request.
} else {
    // Preflight response not sent so send it.
    // To cover the case where cookies are enabled but JavaScript is disabled,
    // initialize the cookie to indicate that JavaScript is disabled.
    setcookie('JS_ENABLED', 0);
    // Prepare the client side redirect used when JavaScript is disabled.
    $content = '0; url='.$_SERVER['REQUEST_URI'];
    if (!$_GET['JS_DETECT']) {
        $content .= empty($_SERVER['QUERY_STRING']) ? '?' : '&';
        $content .= 'JS_DETECT='.session_id();
    }
    // Remove request data which should only be used here.
    unset($_GET['JS_DETECT'],$_GET['JS_ENABLED'],
            $_POST['JS_DETECT'],$_POST['JS_ENABLED'],
            $_COOKIE['JS_DETECT'],$_COOKIE['JS_ENABLED'],
            $_REQUEST['JS_DETECT'],$_REQUEST['JS_ENABLED']);
    // Save all remaining request data in session data.
    $_SESSION['_GET'] = $_GET;
    $_SESSION['_POST'] = $_POST;
    $_SESSION['_FILES'] = $_FILES;
    $_SESSION['_COOKIE'] = $_COOKIE;
    $_SESSION['_SERVER'] = $_SERVER;
    $_SESSION['_REQUEST'] = $_REQUEST;
    // Rename any uploaded files so they won't be deleted by PHP.  When using
    // a clustered web server, upload_tmp_dir must point to shared storage.
    foreach (array_keys($_FILES) as $k) {
        $tmp_name = $_FILES[$k]['tmp_name'].'x';
        if (move_uploaded_file($_FILES[$k]['tmp_name'], $tmp_name))
            $_SESSION['_FILES'][$k]['tmp_name'] = $tmp_name;
    }
// Have the client inform the server as to the status of Javascript.
?>
<!DOCTYPE html>
<html>
<head>
    <script>
        document.cookie = 'JS_ENABLED=1';
// location.reload causes a confirm box in FireFox
//      if (document.cookie) { location.reload(true); }
        if (document.cookie) { location.href = location; }
    </script>
    <meta http-equiv="refresh" content="<?=$content?>" />
</head>
<body>
    <form id="formid" method="post" action="" >
        <input type="hidden" name="<?=$session_name?>" value="<?=$session_id?>" />
        <input type="hidden" name="JS_DETECT" value="<?=session_id()?>" />
        <input type="hidden" name="JS_ENABLED" value="1" />
    </form>
    <script>
        document.getElementById('formid').submit();
    </script>
</body>
</html>
<?php
    exit;
}
?>
1

Ich musste gestern das gleiche Problem lösen, also füge ich hier nur meine .001 hinzu. Die Lösung funktioniert bei mir ok zumindest auf der Homepage (index.php)

Ich möchte nur eine Datei im Stammverzeichnis haben: index.php. Dann verwende ich Ordner, um das gesamte Projekt zu strukturieren (Code, CSS, JS usw.). Der Code für index.php lautet also wie folgt:

<head>
    <title>Please Activate Javascript</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 
</head>

<body>

<script language="JavaScript">
    $(document).ready(function() {
        location.href = "code/home.php";
    });   
</script>

<noscript>
    <h2>This web site needs javascript activated to work properly. Please activate it. Thanks!</h2>
</noscript>

</body>

</html>

Hoffe das hilft jedem. Freundliche Grüße.

0
Jorge