【问题标题】:noscript alternative in XHTML?XHTML 中的 noscript 替代方案?
【发布时间】:2011-06-21 14:52:44
【问题描述】:

在 HTML 中我可以这样做:

<noscript><link href="css/stylenojs.css" rel="stylesheet" type="text/css" /></noscript>

在 XHTML Transitional 或 Strict 文档中是否有一些合规的方法可以做到这一点?

【问题讨论】:

标签: html xhtml web-standards


【解决方案1】:

您给出的示例在 HTML 和 XHTML 中均无效。目前没有任何建议提供包含样式表的方法除非启用脚本。

一般来说,您应该避免使用&lt;noscript&gt;。从可行的东西开始,然后build on it.

在这种情况下,您可以为非 JS 客户端编写样式表,然后:

<body>
<script type="text/javascript">document.body.className += ' js';</script>

... 并包含特定于启用的 JS 的附加规则集:

body.js foo {
}

或者,您可以执行以下操作:

<link href="css/stylenojs.css" rel="stylesheet" type="text/css" id="nojscss" />

var nojscss = document.getElementById('nojscss');
nojscss.parentNode.removeChild(nojscss);

【讨论】:

  • 实际上,Richard 写的是有效的 HTML5,因为没有脚本和自结束标签都可以,但是是的,即使 XHTML5 也不允许
【解决方案2】:

当前选择的答案具有误导性。

&lt;noscript&gt;HTML valid 以及问题中提供的示例。

W3C says:

noscript 元素只在 HTML 语法中有效,它没有 XHTML 语法中的效果。这是因为它的工作方式是 基本上在启用脚本时“关闭”解析器,这样 元素的内容被视为纯文本而不是真实的 元素。 XML 没有定义执行此操作的机制。

现在,关于 XHTML 的小 dirty secret 是浏览器不会在 XML 中处理 XHTML,除非文档在 application/xhtml+xml 中作为 MIME 类型提供。

如果您的页面以正确的XHTML 提供,那么解决方案可能是将页面的doctype 更改为HTML5 并将MIME 类型更改为text/html

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 2014-01-31
    • 2023-03-13
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多