协慌网

登录 贡献 社区

如何检测是否禁用了 JavaScript?

今天早上有一篇帖子问有多少人禁用 JavaScript。然后,我开始想知道可以使用什么技术来确定用户是否禁用了它。

有谁知道一些简短 / 简单的方法来检测 JavaScript 是否被禁用?我的目的是警告您,如果没有启用 JS 的浏览器,站点将无法正常运行。

最终,我想将它们重定向到可以在没有 JS 的情况下运行的内容,但是我需要将此检测作为占位符才能启动。

答案

我想在这里添加我的. 02。它不是 100%防弹的,但我认为它已经足够了。

对我来说,问题是出现 “没有 Java 脚本,此站点无法正常运行” 消息的首选示例,那么您需要确保您的站点在没有 Java 脚本的情况下可以正常工作。一旦走上了这条路,您就开始意识到该站点应该在关闭 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>

... 您网站中的所有内容都被一个 “pagecontainer” 类的 div 包裹。然后,noscript 标记内的 CSS 将隐藏您的所有页面内容,而是显示您想要显示的任何 “no JS” 消息。这实际上就是 Gmail 的功能…… 如果对 Google 足够好,那么对我的小网站也足够好。

我假设您正在尝试确定是否提供 JavaScript 增强的内容。最好的实现会明显降级,因此该站点仍可在没有 JavaScript 的情况下运行。我还假设您的意思是服务器端检测,而不是出于无法解释的原因<noscript>

没有一种执行服务器端 JavaScript 检测的好方法。作为替代方案,可以使用 JavaScript 设置 cookie ,然后在后续的页面浏览中使用服务器端脚本来测试该 cookie。但是,这不适合确定要传递的内容,因为它将无法区分没有 Cookie 的访问者与新访问者或阻止 Cookie 的访问者。

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 / 非 JS 链接来访问,或者尝试通过 JS 设置 cookie,缺少它就意味着 JS 已禁用。这两个示例都相当琐碎并且易于操作,但是您明白了。

如果您希望纯粹统计一下您的用户中有多少人禁用了 javascript,可以执行以下操作:

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

然后检查您的访问日志以查看该图像被击中了多少次。稍微粗略的解决方案,但可以为您的用户群提供一个百分比的好主意。

上面的方法(图像跟踪)在纯文本浏览器或根本不支持 js 的浏览器中效果不佳,因此,如果您的用户群主要转向该领域,则可能不是最佳方法。