如何正确使用<noscript>元素?

7
我是一名有用的助手,可以为您翻译文本。
我今天找到的HTML验证器 - http://html5.validator.nu/ - 表示我的使用<noscript>元素是错误的。我的XHTML源代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<body>
<div id="head">
<noscript>
<p>JavaScript is disabled.</p>
</noscript>
...

验证器的错误信息如下:

Error: XHTML 元素noscript在此上下文中不允许作为XHTML元素div的子元素。(从这个子树中抑制更多的错误。)

元素noscript可以使用的上下文:

  • 在HTML文档的head元素中,如果没有祖先noscript元素。
  • 在期望HTML文档中使用短语内容的地方,如果没有祖先noscript元素。

元素div的内容模型:

  • 流内容。

现在我去Mozilla文档尝试理解它的含义。我发现了一些关于内容类别、流内容、短语内容的信息,哪些元素属于每个类别(无论“属于”具体意味着什么)以及如何使用<noscript>元素的信息(https://developer.mozilla.org/en/HTML/Element/noscript)。

我现在知道这个: <div> 必须包含流内容。<noscript> 必须出现在短语内容中。显然不匹配。我该如何处理?尽管许多元素都属于流和短语类别,但它们似乎并不是互不相交的集合,因此有些无法决定或我不理解。
HTML规范打算如何解决这些怪癖?

我已经添加了doctype和html元素来说明我的页面是XHTML,如果有助于分析的话。我还没有尝试过不同的doctype。我现在已经使用XHTML 1.1一段时间了,但将来考虑改用HTML5。 - ygoe
3个回答

2
在XHTML/XML文档中无法使用"noscript",因为它会禁用“noscript”内容的解析器,而在XML中不能这样做。解析器不能被临时禁用或关闭。
例如,CSE HTML验证器会为XHTML文档生成此消息: XHTML文档不得使用"noscript"元素。这是因为"noscript"的工作方式是在启用脚本时“关闭”解析器,这在XML中无法完成。此外,由于这个原因,"noscript"元素在HTML5中明确不允许使用。
如果您想正确使用"noscript",则需要将文档类型更改为HTML5(推荐)或HTML4,而不是XHTML。

你最后的建议如何与你的引语结尾相一致,“另外,“noscript”元素因此明确不允许在HTML5中使用。”? - Tom

2
请勿使用HTML5验证器来验证您的XHTML 1.1文档。
HTML5规范关于noscript元素说:
“在XML文档中,noscript元素不能使用。”
因此,在XHTML5中不允许在div内使用noscript,但在XHTML 1.1中是允许的。

0
使用官方验证器来验证您的HTML。以下代码在我的验证中完全有效:
<!DOCTYPE html>
<html>
  <head>
    <title>I AM YOUR DOCUMENT TITLE REPLACE ME</title>
  </head>
  <body>    
    <div id="head">
      <noscript>
        <p>JavaScript is disabled.</p>
      </noscript>
    </div>
  </body>
</html>

编辑:有趣的是,W3C验证器声称解析器基于您提供的链接。

“上传的文档已成功检查为HTML5。这意味着所涉及的资源将其自身标识为“HTML5”,并且我们已成功对其进行了正式验证。我们用于此检查的解析器实现基于validator.nu(HTML5)。”

也许http://validator.nu上的验证器是旧版本。编辑编辑:不,它在那里也可以很好地验证。作为HTML5和XHTML 1.0 Strict进行了检查。


请使用HTML5 doctype。否则会抛出错误:XHTML元素noscript在此上下文中不允许作为XHTML元素div的子元素。 - Rob W
@Rob W:我试过了,没有错误。让我再试一次。编辑“此文档已成功检查为HTML5!” - Andy E
请注意,海报中提到了“XHTML”。他们可能没有使用HTML5作为文档类型,而是在XHTML 1/1.1中有更严格的语法? - jmbertucci
@AndyE 我已测试并确认了 OP 的错误。不过,我也能将您的测试用例解析为有效的。 - Rob W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接