2

Is there any difference in <noscript> block processing for pages served with MIME-type text/html versus those served with MIME-type application/xhtml+xml?

As far as I noticed <noscript> block for text/html pages is not processed at all if JavaScript is disabled in browser. And what happens for application/xhtml+xml pages? I suspect that for such pages the block is still analysed when JavaScript is disabled. But I failed to find any clarification of this issue.

Could someone point me to appropriate W3C standard or provide any other clarification?

PS. Situation of interest is visit counting services wich use <noscript> block to track visitors with disabled JS. If elements (for example, zero-sized images) of <noscript> blocks are downloaded in any case then such services should broke :(

4

1 に答える 1

5

最良の説明は、おそらくここの HTML5 ドラフトの説明です: http://dev.w3.org/html5/spec/semantics.html#the-noscript-element

text/html では、正確に何が起こるかの詳細は非常に複雑です。上記のリンクをたどってください。ここで再現しても意味がありません。

application/xhtml+xml の場合、ドラフトには次のように記載されています。

noscript 要素は、XML ドキュメントでは使用できません。

noscript 要素は HTML 構文でのみ有効で、XHTML 構文では無効です。

したがって、application/xhtml+xml では、スクリプトが使用可能かどうかに関係なく、noscript の内容が表示されるはずです。もちろん、スクリプト有効になっている場合、スクリプトを使用してそのような要素を DOM から削除するのは非常に簡単です。

修正。

さらなる調査では、上記の引用が意味することは、 noscript 要素が解析に影響を与えないことです。

ここの XHTML セクション、http://dev.w3.org/html5/spec/the-xhtml-syntax.html#the-xhtml-syntaxで、ドラフトは言う

ユーザー エージェントは、CSS ルールに関係なく、スクリプトが有効になっている noscript 要素を非表示にすることが期待されます。

つまり、あなたが言うように、スクリプトが有効になっている場合、noscript 要素はその内容を隠します。ただし、それがすべてであり、とにかく画像が読み込まれます。さらに、私はこれを試しました:

<html xml:lang="en-GB" xmlns="http://www.w3.org/1999/xhtml" lang="en-GB">
  <head> 
    <title>Test</title>
  </head>
  <body>
    <p>Test 1</p>
    <noscript id="ns">
      <p>Test 2</p>
      <script type="text/javascript">
        document.getElementById("ns").parentNode.removeChild(document.getElementById("ns"));
      </script>
      <img src="test.gif" alt="test"/>
    </noscript>
  </body>
</html>

また、noscript ノードは dom から削除されていますが、Firefox は引き続きイメージをロードしようとしました。

于 2010-01-30T12:02:12.593 に答える