Ich habe eine Seite
http://www.zen76171.zen.co.uk/aaa2.html
mit diesem HTML
<!doctype html>
<html>
<head>
<noscript>aaa</noscript>
<script>document.write("bbb")</script>
</head>
<body>
ccc
</body>
</html>
Ich verstehe, dass der Inhalt des Noscript-Tags ausgeführt werden sollte, wenn ein Browser kein JavaScript ausführt.
In Chrome oder Firefox, wenn keine Erweiterungen irgendetwas blockieren, erhalte ich die Ausgabe „bbb ccc“. Das ist in Ordnung, das macht Sinn. „bbb“ wird angezeigt, weil JavaScript erlaubt ist, und „ccc“ wird angezeigt, weil es anzeigt, ob JavaScript aktiviert ist oder nicht.
Ich versuche dann, NoScript in Firefox zu installieren https://addons.mozilla.org/en-GB/firefox/addon/noscript/
Wenn ich jetzt die Seite neu lade,http://www.zen76171.zen.co.uk/aaa2.html
Es wird angezeigt ccc
. Das zeigt mir, dass Skripte blockiert werden, also ist dieser Teil gut.
Ich würde jedoch folgende Ausgabe erwarten aaa ccc
, da ich erwarte, dass „aaa“ angezeigt wird, wenn Skripte deaktiviert sind, und Skripte sind deaktiviert.
Es gibt auch ein sekundäres Problem, das ich umgehe. Wenn ich NoScript aus Firefox deaktiviere oder sogar „entferne“, erhalte ich immer noch die gleiche Antwort „ccc“. Ich muss Firefox deinstallieren und neu installieren, um NoScript zu entfernen. Aber im Moment reicht das, wenn ich NoScript entfernen möchte.
Die Frage ist: Warum wird nur „ccc“ und nicht „aaa ccc“ angezeigt?
hinzugefügt
Tatsächlich wird mir bei „uBlock Origin“ nur „ccc“ angezeigt. Wenn ich „uBlock Origin“ installiere und es so belasse, wie es ist, also Skripte nicht deaktiviere, erhalte ich „bbb ccc“ (gut). Wenn ich jedoch auf der Seite auf „Skripte deaktivieren“ klicke, erhalte ich „ccc“. „aaa“ wird nicht angezeigt.
Antwort1
Der Noscript-Tag wurde falsch verwendet, obwohl die Browsererweiterung einwandfrei funktioniert. Außerdem kann das Seitenergebnis zwischengespeichert sein und daher ist wahrscheinlich ein Hard Refresh (Neuladen mit Override-Cache) erforderlich.
Fehlerhafte Verwendung
Ich würde jedoch eine Ausgabe von „aaa ccc“ erwarten, da ich erwarte, dass „aaa“ angezeigt wird, wenn Skripte deaktiviert sind, und Skripte sind deaktiviert.
Nein, die erwartete Ausgabe „aaa“ wird nicht angezeigt, da das Noscript-Tag falsch verwendet wurde.
HTML-Noscript-Tag auf W3schoolsbietet eine kurze Erklärung zur Verwendung:
Definition und Verwendung[...]
Das Element <noscript> kann sowohl in <head> als auch in <body> verwendet werden.
Bei Verwendung innerhalb des <head>-Elements: <noscript> darf nur die Elemente <link>, <style> und <meta> enthalten.
Unterschiede zwischen HTML 4.01 und HTML5
In HTML 4.01 kann das <noscript>-Tag nur innerhalb des <body>-Elements verwendet werden.
In HTML5 kann das Tag <noscript> sowohl innerhalb von <head> als auch innerhalb von <body> verwendet werden.
Mit anderen Worten, das von OP verwendete Noscript-Tag ist auf Basis von HTML5 gültig, aber daraus folgt nichtder HTML-Standard. Der Noscript-Tag im HTML-Head-Elementsollte nichtkeinen "freien Text" enthalten.
Seitenergebnis
Es gibt auch ein sekundäres Problem, das ich umgehe. Wenn ich NoScript in Firefox deaktiviere oder sogar „entferne“, erhalte ich immer noch die gleiche Antwort „ccc“ [...]
Die meisten Browser, darunter auch Firefox, verwenden standardmäßig Cache, daher ist wahrscheinlich ein Hard Refresh erforderlich. Dies kann jederzeit problemlos reproduziert werden, sofern der Benutzer das Cache-Verhalten nicht anders konfiguriert hat.
Diskrepanz 1: Der Hard Refresh wird über eine Tastenkombination durchgeführt, die bei Firefox entweder Ctrl+ F5oder Ctrl+ Shift+ sein kann R. Bei einer Browsererweiterung kann der Cache-Effekt bestehen bleiben, bis der Browser erneut gestartet wird (das Benutzererlebnis kann abweichen).
Wenn ich „uBlock Origin“ installiere und auswähle, es so zu belassen, wie es ist, also Skripte nicht zu deaktivieren, erhalte ich „bbb ccc“ (gut). Wenn ich jedoch auf der Seite auf „Skripte deaktivieren“ klicke, erhalte ich „ccc“. „aaa“ wird nicht angezeigt.
Das Noscript-Tag, das „aaa“ enthielt, wird von den Erweiterungen wahrscheinlich ignoriert oder weggelassen, da die Verwendung von „aaa“ nicht dem HTML-Standard entspricht. Das Noscript-Tag im HTML-Head-Element darf nur die drei oben angegebenen Elemente enthalten.
Diskrepanz 2: Das Seitenergebnis wird auch beim lokalen Anzeigen der HTML-Datei in Firefox „bbb ccc“ sein, selbst wenn uBlock Origin aktiviert ist und die erweiterte Option „JavaScript deaktivieren“ aktiviert ist. Dies liegt wahrscheinlich an den eingeschränkten Berechtigungen, die den Erweiterungen in Firefox Quantum erteilt wurden. Mit anderen Worten, die Browsererweiterung kann kein Skript für eine lokale HTML-Seite blockieren, die überDatei-URI-Schema(nicht über den von einem Webserver betriebenen lokalen Host, was eine andere Sache ist).
Versuchen Sie es erneut
Betrachten Sie den geänderten HTML-Inhalt wie folgt:
<!doctype html>
<html>
<head>
<noscript>aaa<style>#this {color:#cccccc;}</style></noscript>
<script>document.write("bbb")</script>
</head>
<body>
<noscript>nnn</noscript>
<span id="this">ccc</span>
</body>
</html>
Laden Sie dann das HTML in Firefox mit uBlock Origin und stellen Sie sicher, dass die Option „JavaScript deaktivieren“ deaktiviert (AUS) oder aktiviert (EIN) ist.
- Wenn „JavaScript deaktivieren“ ausgeschaltet ist, lautet das Ergebnis „bbb ccc“.
- Wenn „JavaScript deaktivieren“ aktiviert ist, ist das Ergebnis „nnn ccc“, wobei „nnn“ vom Noscript-Tag im HTML-Body-Element angezeigt wird und „ccc“ die Farbe vom Noscript-Tag im HTML-Head-Element übernimmt.
- In beiden Fällen wird „aaa“ nie erscheinen, wie zuvor erklärt (entspricht nicht dem Standard).
Diskrepanz 3: Das „aaa“ ist nur sichtbar, wenn JavaScript im Browser selbst deaktiviert ist (Firefox-Versteckkonfiguration, about:config – „javascript.enabled“ auf „false“ gesetzt). Alternativ können Sie einen beliebigen Nur-Text-Browser verwenden, um ein ähnliches Ergebnis zu erzielen. Dies unterscheidet sich von der Option, die die Browsererweiterung bietet, die Firefox Quantum eingeschränkt hattevon Entwurf.
Kurz zusammengefasstVerwenden Sie das Noscript-Tag im HTML-Body-Element, um Text sichtbar zu machen, wenn Skript deaktiviert ist. Die Browsererweiterung funktioniert gemäß dem HTML-Standard ordnungsgemäß, ist jedoch konstruktionsbedingt eingeschränkt.