私はページを持っています
http://www.zen76171.zen.co.uk/aaa2.html
このHTMLで
<!doctype html>
<html>
<head>
<noscript>aaa</noscript>
<script>document.write("bbb")</script>
</head>
<body>
ccc
</body>
</html>
ブラウザがjavascriptを実行していない場合は、noscriptタグの内容を実行する必要があることを理解しています。
chromeまたはfirefoxで、拡張機能が何もブロックされていない場合、bbb cccの出力が得られます。これで問題ありません。それは理にかなっています。'bbb 'はjavascriptが許可されているために表示され、cccはjavascriptが有効かどうかを表示します。
次に、FirefoxにNoScriptをインストールしようとします https://addons.mozilla.org/en-GB/firefox/addon/noscript/
今、私が言及したページをリロードすると http://www.zen76171.zen.co.uk/aaa2.html
ccc
が表示されます。これは、スクリプトがブロックされていることを示しているので、その部分は適切です。
しかし、私が期待する出力はaaa ccc
です。これは、スクリプトが無効になっているとき、およびスクリプトが無効になっているときに「aaa」が表示されることを期待しているためです。
私が回避している二次的な問題もあります。それは、FirefoxからNoScriptを無効にするか、「削除」した場合でも、「ccc」と同じ応答が返されるため、Firefoxをアンインストールして再インストールしてNoScriptを削除する必要があることです。しかし、今のところ、NoScriptを削除したい場合はそれで十分です。
この質問は次のとおりです。「aaaccc」ではなく「ccc」だけが表示されるのはなぜですか。
追加
実際には、「uBlockOrigin」で表示される「ccc」のみを取得します。 'uBlock Origin'をインストールし、スクリプトを無効にしないようにそのままにしておくと、 'bbb ccc'(問題ありません)が表示されます。一方、クリックしてページのスクリプトを無効にすると、「ccc」が表示されます。 「aaa」が表示されません。
ブラウザ拡張機能が正常に機能しているときに、noscriptタグが不適切に使用されました。さらに、ページの結果がキャッシュされる可能性があるため、ハードリフレッシュ(オーバーライドキャッシュを使用したリロード)が必要になる可能性があります。
しかし、スクリプトが無効になっているとき、およびスクリプトが無効になっているときに「aaa」が表示されると予想されるため、期待する出力は「aaaccc」です。
いいえ、noscriptタグが不適切に使用されたため、期待される出力「aaa」は表示されません。
W3schoolsのHTML noscriptタグ 使用法の簡潔な説明を提供します:
定義と使用法[...]
<noscript>要素は、<head>と<body>の両方で使用できます。
<head>要素内で使用する場合:<noscript>には、<link>、<style>、および<meta>要素のみを含める必要があります。
HTML 4.01とHTML5の違い
HTML 4.01では、<noscript>タグは<body>要素内でのみ使用できます。
HTML5では、<noscript>タグは<head>と<body>の両方で使用できます。
つまり、OPで使用されるnoscriptタグは、HTML5に基づいて有効ですが、 HTML標準 には従いません。 HTMLのhead要素のnoscriptタグには、「フリーテキスト」を含めるべきではありません。
私が回避している二次的な問題もあります。それは、FirefoxからNoScriptを無効にするか、「削除」しても、「ccc」と同じ応答が返されることです[...]
Firefoxを含むほとんどのブラウザはデフォルトでキャッシュを使用するため、ハードリフレッシュが必要になる可能性があります。これは、ユーザーがキャッシュの動作を別の方法で構成していない限り、いつでも簡単に再現できます。
不一致1:ハードリフレッシュはキーボードショートカットを介して実行されます。 Ctrl+F5 または Ctrl+Shift+R Firefox用。ブラウザ拡張機能の場合、キャッシュされた効果は、ブラウザが再起動されるまで持続する場合があります(ユーザーエクスペリエンスが異なる場合があります)。
'uBlock Origin'をインストールし、スクリプトを無効にしないようにそのままにしておくと、 'bbb ccc'(問題ありません)が表示されます。一方、クリックしてページのスクリプトを無効にすると、「ccc」が表示されます。 「aaa」が表示されません。
'aaa'の使用法はHTML標準に準拠していないため、 'aaa'を含むnoscriptタグは、おそらく拡張機能によって無視または省略されています。 HTMLのhead要素のnoscriptタグには、上記の3つの要素のみを含める必要があります。
Discrepancy 2:uBlock Originが有効で拡張オプションが有効になっている場合でも、FirefoxでHTMLファイルをローカルに表示した場合もページ結果は「bbbccc」になります「JavaScriptを無効にする」がチェックされています。これは、FirefoxQuantumの拡張機能に与えられた権限が制限されていることが原因である可能性があります。言い換えると、ブラウザ拡張機能は、 ファイルURIスキーム を介して表示されるローカルHTMLページのスクリプトをブロックできません(Webサーバーによって実行されるlocalhostを介さない、これは別の問題です)。
変更されたHTMLコンテンツを次のように検討します。
<!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>
次に、uBlock Originを使用してFirefoxにHTMLをロードし、そのオプション「JavaScriptを無効にする」がオフ(オフ)またはオン(オン)になっている。
不一致3:「aaa」はブラウザ自体でJavaScriptが無効になっている場合にのみ表示されます(Firefoxの非表示構成、about:config- "javascript.enabled 「「false」に設定)。または、テキストのみのブラウザを使用して、同様の結果を確認します。これは、Firefox Quantumが制限していたブラウザ拡張機能によって提供されるオプションとは異なります 設計上 。
TL; DRスクリプトが無効になっているときにテキストを表示するために、HTML本文要素でnoscriptタグを使用します。ブラウザ拡張機能はHTML標準に従って正しく機能していますが、設計によって制限されています。