How to detect if JavaScript is disabled?
今天早上有篇文章问有多少人禁用了javascript。然后我开始想,可以使用什么技术来确定用户是否禁用了它。
有人知道一些简短/简单的方法来检测是否禁用了javascript吗?我的目的是警告用户,如果没有启用JS的浏览器,站点将无法正常运行。
最终,我希望将它们重定向到能够在缺少JS的情况下工作的内容,但是我需要从这个检测作为一个占位符开始。
- 您想如何处理这些信息?它可能会改变你得到的答案——例如,渐进式增强通常比试图检测被禁用的javascript和基于此采取特定操作更受欢迎。
- 渐进式增强是我想要的。我希望不能将它们重定向到其他内容,这些内容将在JS启用或功能强大的浏览器中正常工作。
- @尼古拉斯·扎卡斯在这篇文章中说,忍者已经过期了约2%,尽管已经超过一岁了。
- 最简单的方法是使用noscript显示非javascript站点,并使用javascript通过修改样式显示来显示任何与javascript相关的元素。
- 启用-javascript.com
我想在这里加上我的.02。它不是100%防弹的,但我认为它足够好了。
对于我来说,举一个"没有javascript这个站点不能很好地工作"的首选例子,问题是你需要确保你的站点在没有javascript的情况下工作正常。一旦你开始走这条路,你就会开始意识到网站应该是防弹的,JS关闭了,这是一个很大的额外工作。
所以,你真正想要的是"重定向"到一个说"打开JS,傻瓜"的页面。但是,当然,您不能可靠地执行元重定向。所以,建议如下:
1 2 3 4 5 6 7 8
| <noscript>
<style type="text/css">
.pagecontainer {display:none;}
</style>
You don't have javascript enabled. Good luck with that.
</noscript> |
…其中站点中的所有内容都用一个"pagecontainer"类的分区包装。然后,noscript标记中的css将隐藏所有页面内容,并显示您希望显示的任何"no js"消息。这实际上是Gmail所做的……如果它对谷歌足够好,对我的小网站来说就足够好了。
- (9分钟后)但是,它不会生效。嗯,不管怎样,还是要指出创意。
- @史蒂夫试过验证google.com吗?验证只是确定文档与规范表之间的距离,它不会影响页面的可用性。
- 我不喜欢强迫用户启用javascript的想法。如果他就是不能呢?我认为在几乎所有的公共网站中,低调的javascript都是可行的。
- @jonasgeiregat如果您的Web应用程序是构建的,并且需要运行JavaScript,那么强制用户需要JavaScript有什么问题?我经常听到这个评论,但它只对最简单的网站有效。尝试不使用JS的Facebook,看看会发生什么。如果你的应用是为javascript而构建的,那么要求99%的用户都启用了什么又有什么问题呢?
- 如果您要处理依赖于javascript的控件,那么这远远不是一种有效的方法。(以登记表为例)。你可以在大多数浏览器中禁用CSS。
- 更好的解决方案是分离样式块:这应该在头部部分。@史蒂夫,现在它将验证:)
- 这将如何影响搜索引擎爬虫?他们会看不到任何内容吗?
- +1我喜欢这种方法,它不仅对用户有建设性,而且不需要重构一堆代码就可以快速简单地实现。我宁愿有一个建设性的信息,也不想知道为什么X不起作用。
- @李把它钉在钉子上,你只能为用户做这么多,然后你才能画出你将支持什么。我们希望所有用户都有一个支持互联网的设备,我是否也应该为那些拒绝访问互联网的人实现我的网站的纸质版本?
- @科尔斯,我在2012年3月发表了这一评论,我认为今天的情况是双重的。从那时起,我们已经有了Meteor、Angular.js、Fame.us和大量优秀的库,它们都需要javascript才能启动。我想知道选择禁用JS的用户实际上是在尝试实现什么…很明显,他们并不像我们其他人那样在同一个网站上冲浪,而且没有理由一家公司需要缩小他们网站的规模,以吸引最微小的顽固用户。
- 为什么不能可靠地执行元重定向?
- @埃利奥特:嗯……我忘了细节!真尴尬。(-;但是我知道元数据重定向必须在头中,这意味着对于您的页面来说,它可能太远了,无法检测JS是否已启用。我知道这不是最有用的答复。
- 是的,我想知道为什么我不能推翻你的答案,因为我忘了激活我的JS:-)我喜欢并实现你的解决方案!谢谢!
- 我想我几乎永远不会,永远不会想要一个显示turn on JS, silly的重定向页面。尤其是不检测它是否已经启用…
- @李在没有JS的情况下做可能会降低JavaScript的整体复杂性,而复杂的是不道德的事情往往会隐藏起来。Facebook是一个不道德的好例子,它试图推动世界跟随它。如果你下定决心,并且能够为你的心脏着想,那么低调的javascript可以帮助你在网络上找到你的路。
- @纳萨-我对你的评论感到困惑。Facebook试图隐藏什么"不道德"的东西,这与启用或不启用javascript有什么关系?
- Facebook实际上也可以不使用JS,但是你被告知要使用移动增强版(或者打开JS)。至于"谁不使用JS",实际上有很多。首先,数据连接有限的人可能会关掉JS,那些喜欢手机工作超过几个小时的人(JS处理是手机在线的主要耗电源之一),更不用说我们之间的安全意识了,浏览器中有noscript扩展等等。当然,这些人足够先进,如果他们想使用服务,就知道如何打开它。
我假设您正试图决定是否交付JavaScript增强的内容。最好的实现会完全降级,因此站点仍然在没有JavaScript的情况下运行。我还假设您的意思是服务器端检测,而不是出于无法解释的原因使用元素。
没有一种好的方法来执行服务器端的javascript检测。另一种选择是,可以使用javascript设置cookie,然后在随后的页面视图上使用服务器端脚本测试该cookie。但是,这不适合决定交付什么内容,因为它无法区分没有cookie的访问者和阻止cookie的新访问者或访问者。
- @Matt Lohkamp:或者甚至在默认情况下隐藏消息,并将一个
块放在中以取消隐藏(如果启用了JS,则不会在那里回流)。令人惊讶的是,这在所有现代浏览器中都有效,甚至在IE6中也是如此。
- @马特-我这样做了一段时间,但消息会在慢速连接上停留一段时间,让用户感到困惑。我在这里寻找一个不同的解决方案。@piskvor-头中的