【问题标题】:Using <noscript> within <head>: Good idea or bad idea?在 <head> 中使用 <noscript>:好主意还是坏主意?
【发布时间】:2011-10-26 12:48:51
【问题描述】:

我注意到 Facebook 会这样做,他们将元刷新包含在 &lt;noscript&gt; 中,并包含在 &lt;head&gt; 标记中。他们使用它来检测用户代理是否启用了 javascript。

我们考虑使用这种方法有两个原因:

  1. 像 facebook 一样自动重定向到网站的非 js 优化版本。
  2. 要包含一个非 js 样式表,以希望禁用仅 javascript 锚点以及 CSS3 投诉浏览器上的手指指针,淡出这些按钮以使其更明显地被禁用(而不是工作)。

出于上述原因使用此方法是否会导致任何不利影响,从而影响大部分用户代理?

【问题讨论】:

  • 即使我注意到了这一点,并且我一直在生产站点上使用它来将用户发送到非 JS 页面,要求他们更新浏览器或启用 JS 或任何可能的方式,我当然会喜欢了解这种方法的替代方案和陷阱,支持问题
  • 建议使用有效的 html,例如我在解析 PHP 中 HEAD 中具有 NOSCRIPT 标记的 HTML 时遇到问题。

标签: javascript html css noscript html-head


【解决方案1】:

不,在头部使用&lt;noscript&gt;标签不应该有任何过度的负面影响。

也就是说,&lt;noscript&gt; 有一些缺点:

  • 仅当浏览器不支持 JavaScript 或它被禁用时才有效。如果 Javascript 被防火墙阻止,&lt;noscript&gt; 标记的内容将不可见。
  • Javascript 支持很差的用户代理仍将忽略&lt;noscript&gt; 内容。
  • 虽然大多数浏览器在头部支持 &lt;noscript&gt;,但它在技术上是无效的 X(HTML),因此您的页面可能无法验证。

IMO,您想做的是一件非常好的事情,并且是对标签的适当使用。但是,更好的解决方案是在 Javascript 中使用功能检测来启用 Javascript 功能,而不是使用&lt;noscript&gt; 来禁用它们。

如果您依赖 HTML5 功能,我会为此目的推荐 Modernizr 库。

【讨论】:

    【解决方案2】:

    对于第二个,我建议使用最初为您的 &lt;html&gt; 元素提供 no-js 类的方法,然后立即使用 JavaScript 删除该类,并将其替换为 js 类(或包括像Modernizr 这样自动执行此操作的库)。这样,您可以通过在这些样式前面加上 .js.no-js 来将 CSS 样式定位到启用和禁用的 JavaScript 情况。

    类似这样的东西,例如:

    .js span.javascriptOnlyAnchor { cursor: pointer; text-decoration: underline; }
    
    .no-js span.javascriptOnlyAnchor { display: none; }
    

    Paul Irish 在这里谈论更多:http://paulirish.com/2009/avoiding-the-fouc-v3/

    【讨论】:

    • 您建议在输出缓冲区的哪个位置实际运行 js?在头脑中?紧接着身体?当执行重新分类html的js时,html(理想情况下)仍然是打开的这一事实不会出现问题吗?我不会安装库,但会自定义编码。
    • 这是少数几个在头脑中使用一点 JavaScript 是个好主意的情况之一。否则,您仍然容易受到无样式(或在本例中为错误样式)内容的影响。
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2015-07-20
    • 2010-11-23
    • 2019-11-11
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多