Idee gesucht: No JS

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Idee gesucht: No JS

Post by frase » Tue Sep 01, 2020 9:36 am

In vielen meiner Templates gibt es einen .noJS-Bereich, der den Benutzer darauf hinweisen soll, dass JavaScript in seinem Browser nicht ausgeführt wird und die Seite deshalb nicht funktioniert, oder nur teilweise dargestellt wird oder ...

Ich realisiere das, indem ich halt einen <div class="noJS"> mit besagtem Hinweis ins Template schreibe.
Wird JS ausgeführt, dann wird dieser Bereich ausgeblendet:

Code: Select all

<script>
document.write('<style>');
document.write('.noJS { display: none; } ');
document.write('<\/style>');
</script>
Wird JS nicht ausgeführt, bleibt der Bereich stehen und der Benutzer wird informiert.

Wie ihr wisst, genügt ein einfaches <noscript> ... </noscript> nicht.

Unser Herr Chrome hat nun aber eine neue Idee, wie er (eigentlich nur) Skripte aus fremden Quellen verhindern will und meckert nun prinzipiell jedes document.write(...) an.
Natürlich könnte man das ignorieren - die Meldung in der Konsole sieht aber trotzdem nicht gut aus:
Konsole wrote:[Violation] Avoid using document.write(). https://developers.google.com/web/updat ... ment-write
Hat jemand eine Idee, wie man das besser lösen könnte?

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Idee gesucht: No JS

Post by Holger » Tue Sep 01, 2020 10:01 am

frase wrote:
Tue Sep 01, 2020 9:36 am
Hat jemand eine Idee, wie man das besser lösen könnte?

Code: Select all

<script>document.getElementsByClassName('noJS').style.display='none';</script>

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Idee gesucht: No JS

Post by frase » Tue Sep 01, 2020 10:03 am

Ich höre dich im Hintergrund richtig lachen - oder du schimpfst über meine Dummheit.

Danke für den Klaps auf den Hinterkopf.
War nötig ;)

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Idee gesucht: No JS

Post by cmb » Tue Sep 01, 2020 10:08 am

Holger wrote:
Tue Sep 01, 2020 10:01 am
frase wrote:
Tue Sep 01, 2020 9:36 am
Hat jemand eine Idee, wie man das besser lösen könnte?

Code: Select all

<script>document.getElementsByClassName('noJS').style.display='none';</script>
Ich glaube, das geht so nicht, da getElementsByClassName() eine NodeList liefert. Müsste eher so sein:

Code: Select all

<script>
(function () {
    var scripts = document.getElementsByClassName('noJS'), i;
    for (i = 0; i < scripts.length; ++i) {
        scripts[i].style.display='none';
    }
}());
</script>
Oder die Scripte komplett aus dem DOM entfernen:

Code: Select all

<script>
(function () {
    var scripts = document.getElementsByClassName('noJS'), i;
    for (i = 0; i < scripts.length; ++i) {
        scripts[i].parentNode.removeChild(scripts[i]);
    }
}());
</script>
Und grundsätzlich sollte man document.write() vermeiden, da es blockiert.
Christoph M. Becker – Plugins for CMSimple_XH

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Idee gesucht: No JS

Post by Holger » Tue Sep 01, 2020 10:15 am

cmb wrote:
Tue Sep 01, 2020 10:08 am
Ich glaube, das geht so nicht, da getElementsByClassName() eine NodeList liefert. Müsste eher so sein:
Stimmt.

Dann halt

Code: Select all

<script>document.getElementById('noJS').style.display='none';</script>
und eine ID statt eine Klasse verwenden. Das ist im konkreten Fall ja kein Problem.

cmb wrote:
Tue Sep 01, 2020 10:08 am
Oder die Scripte komplett aus dem DOM entfernen:
Den muss ich mir merken! Gute Idee (für andere Zwecke).

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Idee gesucht: No JS

Post by frase » Tue Sep 01, 2020 10:20 am

cmb wrote:
Tue Sep 01, 2020 10:08 am
Ich glaube, das geht so nicht, da getElementsByClassName() eine NodeList liefert. Müsste eher so sein:
...
Tatsächlich, das hatte ich gerade auch bemerkt.
Jetzt funktioniert es.

Man muss die ganze Chose natürlich ans Ende des Dokuments setzen.
Oben (im Head) nützt es nix, da das Element zu dem Zeitpunkt noch nicht da ist.

Ich frage mich, ob es bei einem noJS-Bereich mit viel Inhalt nicht zu "Blitzern" beim Seitenaufbau kommen könnte?
Erst wird es angezeigt - dann wieder entfernt.

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Idee gesucht: No JS

Post by Holger » Tue Sep 01, 2020 10:21 am

frase wrote:
Tue Sep 01, 2020 10:20 am
Tatsächlich, das hatte ich gerade auch bemerkt.
... und der Christoph lacht :lol: :mrgreen:

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Idee gesucht: No JS

Post by Holger » Tue Sep 01, 2020 10:24 am

frase wrote:
Tue Sep 01, 2020 10:20 am
Ich frage mich, ob es bei einem noJS-Bereich mit viel Inhalt nicht zu "Blitzern" beim Seitenaufbau kommen könnte?
Erst wird es angezeigt - dann wieder entfernt.
Ist erwartbar.

Aber, ich habe mich nie dafür interessiert, warum genau ist <noscript> eigentlich eine schlechte Idee?

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Idee gesucht: No JS

Post by frase » Tue Sep 01, 2020 10:26 am

Also, das mit der ID geht auch und ist kürzer.

P.S.
Lachen ist gesund!

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Idee gesucht: No JS

Post by frase » Tue Sep 01, 2020 10:28 am

Holger wrote:
Tue Sep 01, 2020 10:24 am
Aber, ich habe mich nie dafür interessiert, warum genau ist <noscript> eigentlich eine schlechte Idee?
Weil man (z.B. per Browsererweiterung) einfach nur die JS-Ausführung unterbinden kann.
Da greift <noscript> nicht.
Oder die Abarbeitung von JS wird durch ein anderes Ergeignis unterbrochen.

Post Reply