Firefox で NoScript または uBlock Origin を実行しているときに、このページがこのようにレンダリングされるのはなぜですか (noscript タグの内容が無視されます)?

Firefox で NoScript または uBlock Origin を実行しているときに、このページがこのようにレンダリングされるのはなぜですか (noscript タグの内容が無視されます)?

私のページがあります

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」が表示され、スクリプトが無効になっているときに「aaa」が表示されると予想されるからです。

私が回避している二次的な問題もあります。それは、Firefox から NoScript を無効にしたり、「削除」したりしても、同じ「ccc」という応答が返されるので、NoScript を削除するには Firefox をアンインストールして再インストールする必要があるということです。しかし、今のところ、NoScript を削除するにはこれで十分です。

質問は、「aaa ccc」ではなく「ccc」だけが表示されるのはなぜですか?

追加した

実際に「uBlock Origin」で表示されるのは「ccc」だけです。「uBlock Origin」をインストールし、スクリプトを無効にせずにそのままにしておくことを選択すると、「bbb ccc」(問題ありません) が表示されます。一方、ページ上のスクリプトを無効にするためにクリックすると、「ccc」が表示されます。「aaa」は表示されません。

答え1

ブラウザ拡張機能は正常に動作していますが、noscript タグが不適切に使用されています。また、ページ結果がキャッシュされている可能性があるため、ハードリフレッシュ (キャッシュを上書きして再読み込み) が必要になる可能性があります。

不適切な使用

しかし、私が期待する出力は「aaa ccc」です。なぜなら、スクリプトが無効になっているときやスクリプトが無効になっているときに「aaa」が表示されると予想されるからです。

いいえ、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 を含むほとんどのブラウザはデフォルトでキャッシュを使用するため、ハードリフレッシュが必要になる可能性があります。ユーザーがキャッシュの動作を別途設定しない限り、これはいつでも簡単に再現できます。

矛盾 1Ctrl: ハードリフレッシュはキーボードショートカットで実行されます。Firefox の場合は+F5またはCtrl+ Shift+のいずれかですR。ブラウザ拡張機能の場合、キャッシュされた効果はブラウザが再起動されるまで持続することがあります (ユーザーエクスペリエンスが異なる場合があります)。

「uBlock Origin」をインストールし、スクリプトを無効にせずにそのままにしておくことを選択すると、「bbb ccc」(問題ありません) が表示されます。一方、ページ上のスクリプトを無効にするためにクリックすると、「ccc」が表示されます。「aaa」は表示されません。

'aaa' を含む noscript タグは、'aaa' の使用方法が HTML 標準に従っていないため、拡張機能によって無視または省略されている可能性があります。HTML の head 要素内の noscript タグには、上記の 3 つの要素のみを含める必要があります。

矛盾 2: uBlock Originが有効で拡張オプション「JavaScriptを無効にする」がチェックされている場合でも、FirefoxでローカルのHTMLファイルを表示すると、ページ結果は「bbb ccc」になります。これは、Firefox Quantumの拡張機能に与えられた権限が制限されているためと思われます。言い換えれば、ブラウザ拡張機能は、ファイルURIスキーム(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 を無効にする」のチェックを外す (オフ) か、チェックを付ける (オン) ようにします。

  • 「JavaScriptを無効にする」がオフの場合、結果は「bbb ccc」になります。
  • 「JavaScriptを無効にする」がオンの場合、結果は「nnn ccc」になります。「nnn」はHTML body要素のnoscriptタグから表示され、「ccc」はHTML head要素のnoscriptタグから色を継承します。
  • どちらの場合も、前述のように「aaa」は表示されません(標準に従っていません)。

矛盾3: 'aaa' は、ブラウザ自体で JavaScript が無効になっている場合にのみ表示されます (Firefox の隠し設定、about:config - "javascript.enabled" が "false" に設定)。または、テキストのみのブラウザを使用して同様の結果を確認します。これは、Firefox Quantum が制限していたブラウザ拡張機能によって提供されるオプションとは異なります。意図的に

要約スクリプトが無効になっているときにテキストを表示するには、HTML body 要素で noscript タグを使用します。ブラウザ拡張機能は HTML 標準に従って適切に動作しますが、設計上制限されています。

関連情報