Natürlich sind Cookies und HTTP-Header großartige Lösungen, aber beide erfordern eine explizite serverseitige Beteiligung.
Für einfache Websites oder wenn ich keinen Zugriff auf das Backend habe, ziehe ich clientseitige Lösungen vor.
--
Ich verwende das Folgende, um dem HTML-Element selbst ein Klassenattribut zuzuweisen, sodass mein CSS so ziemlich alle anderen Anzeigelogik behandeln kann.
METHODEN:
1) Platzieren Sie document.getElementsByTagName('html')[0].classList.add('js-enabled');
über dem -Element.
WARNUNG!!!! Diese Methode überschreibt alle Klassenattribute von , ganz zu schweigen davon, dass es möglicherweise kein "gültiges" HTML ist, jedoch in allen Browsern funktioniert, in denen ich es getestet habe.
*HINWEISE: Aufgrund des Zeitpunkts, zu dem das Skript ausgeführt wird, bevor das -Tag verarbeitet wird, wird ein leeres classList-Array ohne Knoten erstellt. Wenn das Skript abgeschlossen ist, erhält das -Element nur die von Ihnen hinzugefügten Klassen.
2) Erhalten Sie alle anderen -Klassenattribute, indem Sie das Skript einfach direkt nach dem Öffnen des -Tags platzieren.
In beiden Fällen werden bei deaktiviertem JS keine Änderungen an den -Klassenattributen vorgenommen.
ALTERNATIVEN
Über die Jahre habe ich ein paar andere Methoden verwendet:
<!--
(function(d, a, b){
let x = function(){
// Auswählen und austauschen
let hits = d.getElementsByClassName(a);
for( let i = hits.length - 1; i >= 0; i-- ){
hits[i].classList.add(b);
hits[i].classList.remove(a);
}
};
// Initialisierung Zweite Durchlauf...
setTimeout(function(){ x(); },0);
x();
})(document, 'no-js', 'js-enabled' );
-->
// Minifiziert als:
<!--
(function(d, a, b, x, hits, i){x=function(){hits=d.getElementsByClassName(a);for(i=hits.length-1;i>=0;i--){hits[i].classList.add(b);hits[i].classList.remove(a);}};setTimeout(function(){ x(); },0);x();})(document, 'no-js', 'js-enabled' );
-->
- Dies durchläuft die Seite zweimal, einmal an der Stelle, an der es auf der Seite ist, normalerweise direkt nach dem -Tag und einmal nach dem Laden der Seite. Zwei Durchläufe waren erforderlich, da ich es in eine header.tpl-Datei eines CMS eingefügt habe, auf das ich keinen Backend-Zugriff hatte, aber Styling-Optionen für no-js-Schnipsel anzeigen wollte.
Der erste Durchlauf würde die .js-enabled-Klasse setzen, um globale Styles zu ermöglichen und die meisten weiteren Neulayouts zu verhindern. Der zweite Durchlauf war eine Auffanglösung für später eingefügten Inhalt.
BEGRÜNDUNGEN:
Die Hauptgründe, warum mir wichtig war, ob JS aktiviert war oder nicht, waren "Styling"-Zwecke, das Ausblenden/Einblenden eines Formulars, das Aktivieren/Deaktivieren von Schaltflächen oder das Neugestalten von Präsentationen und Layouts von Slidern, Tabellen und anderen Darstellungen, die JS benötigten, um "korrekt" zu funktionieren und ohne JS nutzlos oder unbrauchbar wären, um Animationen durchzuführen oder die Interaktionen zu handhaben.
Außerdem können Sie mit JavaScript nicht direkt feststellen, ob JavaScript "deaktiviert" ist... nur ob es "aktiviert" ist, indem Sie JavaScript ausführen, sodass Sie sich entweder auf verlassen oder sich darauf verlassen können, dass CSS die Styles umschaltet und falls JavaScript ausgeführt wird, in den "js-enabled"-Modus wechselt.
0 Stimmen
Was möchtest du mit diesen Informationen tun? Es könnte die Antwort beeinflussen, die du bekommst - z.B. sollte in der Regel die progressive Verbesserung bevorzugt werden, anstatt zu versuchen, JavaScript-Deaktivierung zu erkennen und spezifische Maßnahmen basierend darauf zu ergreifen.
0 Stimmen
Progressive enhancement ist das, wonach ich suche. Ich möchte in der Lage sein, sie zu alternativem Inhalt umzuleiten, der ordnungsgemäß funktioniert, wenn kein JS-fähiger oder fähiger Browser vorhanden ist.
1 Stimmen
@expiredninja Dieser Beitrag von Nicholas Zakas besagt etwa 2%, obwohl er über ein Jahr alt ist.
0 Stimmen
Der einfachste Weg ist die Verwendung von
, um die nicht-JavaScript-Seite anzuzeigen, und die Verwendung von JavaScript, um alle JavaScript-abhängigen Elemente anzuzeigen, indem man den Style-Display modifiziert.
0 Stimmen
enable-javascript.com