在<head>标签内使用<noscript>:好主意还是坏主意?

9
我注意到Facebook使用了一种方法,即在<head>标签中包含一个<noscript>元素和一个meta refresh。他们用这个方法来检测用户代理是否启用了JavaScript。
我们考虑使用这种方法有两个原因:
1.像Facebook一样自动重定向到非js优化版本的站点。 2.包含一个非js样式表,希望禁用仅针对JavaScript锚点的手指指针,以及为CSS3兼容的浏览器淡化那些按钮,使其更明显地被禁用(而不是不工作)。
使用这种方法会导致任何负面影响,影响大量用户代理吗?

即使我也注意到了这一点,而且我一直在一个生产网站上使用它来将用户发送到非JS页面,要求他们更新浏览器或启用JS或者其他可能的操作。我肯定很想知道这种方法的替代方案和缺陷,支持此问题。 - Kumar
推荐使用有效的HTML,例如我遇到了一个在PHP中具有HEAD中NOSCRIPT标签的HTML解析问题。 - ZiTAL
2个回答

8
不,使用中的

4
对于第二种方法,建议开始时给<html>元素赋予no-js类,然后立即使用JavaScript将该类删除,并替换为js类(或者使用像Modernizr 这样自动执行的库)。这样,您可以通过在这些样式前缀中添加.js.no-js 来为启用和禁用JavaScript的情况目标CSS样式。
例如,像这样:
.js span.javascriptOnlyAnchor { cursor: pointer; text-decoration: underline; }

.no-js span.javascriptOnlyAnchor { display: none; }

保罗·爱尔兰在这里更详细地讲解了这个问题:http://paulirish.com/2009/avoiding-the-fouc-v3/


在输出缓冲区的哪个时刻,您建议实际运行js?在head之内?在body之后?当执行用于重新分类html的js时,html仍将(理想情况下)保持打开状态,这不会引起任何问题吗?我不会安装库,而是会自定义编码。 - anonymous-one
这是很少有时候在头部放一小段JavaScript是个好主意。否则,你仍然容易遭受未经样式化(或错误样式化)的内容闪烁。 - Dave Ward

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