javascript - 如何检测JavaScript被禁用?

  显示原文与译文双语对照的内容

今早有一个帖子询问有多少人禁用了 javascript 。 然后我开始想知道哪些技术可以用来决定用户是否已经禁用它。 有人知道一些简单的简单方法来检测Javascript是否被禁用? 我的意图是给警告该站点不能够正常工作而不在浏览器有江苏最终启用,这个我还是希望让它们转到内容,是有工作能力的abscence中 JS,但我需要这个检测作为一个占位符,来启动。

时间:

我假设你正试图决定是否交付JavaScript-enhanced内容。 最好的实现会干净地降级,这样站点仍然可以不用JavaScript进行操作。 我猜你是指server-side检测,而不是使用 <noscript> 元素。

没有一个好的方法来执行 server-side JavaScript检测。 相反,使用JavaScript设置一个 cookie,然后在随后的页面视图中使用server-side脚本测试该 cookie ;适当地传递内容。

我想在这里添加我的. 02. 它不是 100%防弹的,但我觉得它足够好了。

对于我来说,使用某种"没有 Javascript,这里站点无法正常工作"消息的首选示例是,你需要确保站点正常工作,而没有 Javascript 。 一旦你可以下来,这条路,那么你开始意识到,这个网站应该是防弹的,用JS关闭,这就是一整个星球上的额外工作。

所以,你真正想要的是一个"重新定向"到一个页面,上面写着"打开 JS,傻瓜"。 但是,当然,你不能可靠地进行元重定向。 下面是建议:


<noscript>
 <style type="text/css">
. pagecontainer {display:none;}
 </style>
 <div class="noscriptmsg">
 You don't have javascript enabled. Good luck with that.
 </div>
</noscript>

一个div的类- - 以便让所有的内容在你的网站是 wrapped. 这个插件标记中的CSS会隐藏所有页面内容,并显示你想要显示的任何"无 JS"消息。 这实际上是Gmail所做的。。而且如果它对谷歌足够好,它对于我的小网站来说足够好了。

noscript 块在禁用JavaScript时执行,通常用于显示你在JavaScript中生成的替代内容,例如


<script type="javascript">
. . . construction of ajaxy-link, setting of"js-enabled" cookie flag, etc..
</script>
<noscript>
 <a href="next_page.php?nojs=1">Next Page</a>
</noscript>

没有JS的用户将获得 next_page 链接- 你可以在下面的页面添加参数,这样你就可以在下一页中知道它们是否通过 JS/non-js链接,或者没有使用JS来设置 cookie 。 这两个例子都是相当琐碎和开放的,但是你可以得到。

如果你想完全统计一下你的用户禁用了多少 javascript,你可以执行以下操作:


<noscript>
 <img src="no_js.gif" alt="Javascript not enabled"/>
</noscript>

然后检查你的访问日志,看看这个图像被击中了多少次。 一个稍微粗糙的解决方案,但它将为你的用户基础提供一个好的percentage-wise 。

上面的方法( 图像跟踪) 对于text-only浏览器或者不支持js的浏览器都不适用,所以如果你的userbase主要面向那个领域,这可能不是最好的方法。

如果你的用例有一个表单( e.g,登录表单),并且server-side脚本需要知道用户是否启用了 JavaScript,那么你可以执行如下操作:


<form onsubmit="this.js_enabled.value=1;return true;">
 <input type="hidden" name="js_enabled" value="0">
 <input type="submit" value="go">
</form>

这将在提交表单之前将js_enabled的值更改为 1. 如果你的server-side脚本获得 0,则没有 JS 。 如果它得到 1,JS !

这就是我的工作: 如果禁用了 javascript,它将重定向一个访问者


<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html"/></noscript>

在主体上使用。no-js类并基于。no-js父类创建非javascript样式。 如果禁用了 javascript,你将得到所有非javascript样式。如果有JS支持,no-js类将被替换为所有的样式。


 document.body.className = document.body.className.replace("no-js","js");

在 HTML5 Boilerplate http://html5boilerplate.com/ 中使用的技巧通过 hardwarebutton,但是你可以使用一行javascript来替换类

noscript标签很好,但是为什么你的html中有多余的东西可以用css来完成

你将需要查看noscript标签。


<script type="text/javascript">
...some javascript script to insert data...
</script>
<noscript>
 <p>Access the <a href="http://someplace.com/data">data.</a></p>
</noscript>

...