如何检测是否禁用了JavaScript?

JavaScript

小胖MandyGil

2020-03-11

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

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

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

第764篇《如何检测是否禁用了JavaScript?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

19个回答
Gil樱Green 2020.03.11

在noscript中的meta中添加刷新不是一个好主意。

  1. 因为noscript标签不符合XHTML

  2. 属性值“ Refresh”是非标准的,不应使用。“刷新”使对页面的控制远离用户。使用“刷新”将导致W3C的Web内容可访问性指南---参考http://www.w3schools.com/TAGS/att_meta_http_equiv.asp失败

宝儿LEY理查德 2020.03.11

使用我在这里介绍的纯服务器端解决方案检查cookie,然后通过使用Jquery.Cookie删除cookie来检查javascript,然后以这种方式检查cookie并同时检查cookie和javascript

阳光猿 2020.03.11

人们已经发布了一些示例,这些示例是检测的不错选择,但是基于您的“警告警告,如果没有启用JS的浏览器,站点将无法正常运行”。您基本上会添加一个在页面上以某种方式显示的元素,例如,获得徽章后在Stack Overflow上显示“弹出式窗口”,并显示一条适当的消息,然后使用一些Javascript将其删除,该Javascript会在页面加载后立即运行(我的意思是DOM,而不是整个页面)。

SamJinJin 2020.03.11

在什么地方检测到它?JavaScript?那是不可能的。如果只希望将其用于记录目的,则可以使用某种跟踪方案,其中每个页面都有JavaScript,这些JavaScript会请求特殊资源(可能很小gif或类似)。这样,您就可以区分唯一页面请求和跟踪文件请求之间的区别。

小宇宙猪猪乐 2020.03.11

为什么不只是放置一个劫持的onClick()事件处理程序,该事件处理程序仅在启用JS时才会触发,并使用该事件处理程序将参数(js = true)附加到单击/选择的URL(您还可以检测到一个下拉列表)并更改添加隐藏表单字段的值)。因此,现在服务器看到此参数(js = true)时,便知道已启用JS,然后在服务器端执行了高级逻辑。
不利的一面是,用户首次访问您的网站时,书签,URL,搜索引擎生成的URL-您将需要检测到这是新用户,因此不要寻找附加在URL上的NVP,并且服务器必须等待下一次单击才能确定用户已启用JS /已禁用JS。此外,另一个缺点是该URL最终会出现在浏览器URL上,并且如果该用户随后将该URL标记为书签,即使该用户未启用JS,它也会具有js = true NVP,尽管在下一次单击时,服务器会明智的做法是了解用户是否仍启用了JS。igh ..这很有趣...

逆天米亚 2020.03.11

我过去使用的一种技术是使用JavaScript编写会话cookie,该cookie只是充当表示启用JavaScript的标志。然后,服务器端代码将查找此cookie,如果找不到,则将采取适当的措施。当然,此技术确实依赖于启用cookie!

Itachi泡芙Pro 2020.03.11

我认为您可以在noscript标签中插入图片标签,然后查看统计信息,您的网站已经加载了多少次,以及该图片的加载频率。

蛋蛋LEY 2020.03.11

常见的解决方案是将meta标记与noscript结合使用,以刷新页面并在禁用JavaScript时通知服务器,如下所示:

<!DOCTYPE html>
<html lang="en">
    <head>
        <noscript>
            <meta http-equiv="refresh" content="0; /?javascript=false">
        </noscript>
        <meta charset="UTF-8"/>
        <title></title>
    </head>
</html>

在上面的示例中,当禁用JavaScript时,浏览器将在0秒内重定向到网站的主页。另外,它还将参数javascript = false发送到服务器。

然后,服务器端脚本(例如node.js或PHP)可以解析该参数,并知道JavaScript已被禁用。然后,它可以将网站的特殊非JavaScript版本发送给客户端。

小宇宙米亚猿 2020.03.11

这是“最干净”的解决方案ID用法:

<noscript>
    <style>
        body *{ /*hides all elements inside the body*/
            display: none;
        }
        h1{ /* even if this h1 is inside head tags it will be first hidden, so we have to display it again after all body elements are hidden*/
            display: block;
        }
    </style>
    <h1>JavaScript is not enabled, please check your browser settings.</h1>
</noscript>
猴子Near 2020.03.11

如果禁用了javascript,则无论如何客户端代码都不会运行,所以我认为您是想让该信息在服务器端可用。在这种情况下,noscript的帮助较小。取而代之的是,我将有一个隐藏的输入并使用javascript来填充一个值。在下一个请求或回发之后,如果该值在那里,则表示您已打开javascript。

请注意noscript之类的东西,第一个请求可能显示为禁用javascript,但以后的请求会打开它。

梅小哥 2020.03.11

将此添加到每个页面的HEAD标签。

<noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
</noscript>

所以你有了:

<head>
    <noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
    </noscript>
</head>

感谢杰伊。

西门西门 2020.03.11

<noscript>甚至没有必要,更不用说XHTML不支持

工作示例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
    <title>My website</title>
    <style>
      #site {
          display: none;
      }
    </style>
    <script src="http://code.jquery.com/jquery-latest.min.js "></script>
    <script>
      $(document).ready(function() {
          $("#noJS").hide();
          $("#site").show();
      });
    </script>
</head>
<body>
    <div id="noJS">Please enable JavaScript...</div>
    <div id="site">JavaScript dependent content here...</div>
</body>
</html>

在此示例中,如果启用了JavaScript,那么您将看到该站点。如果不是,那么您会看到“请启用JavaScript”消息。测试是否启用JavaScript的最好方法就是尝试并使用JavaScript!如果有效,则启用,否则无效。

小卤蛋村村 2020.03.11

您可以使用简单的JS代码段来设置隐藏字段的值。回发后,您知道是否启用了JS。

或者,您可以尝试打开一个快速关闭的弹出窗口(但是可能会看到)。

另外,您还有NOSCRIPT标记,可用于为禁用JS的浏览器显示文本。

YOC66078158 2020.03.11

您将要看一下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>
NearDavaid 2020.03.11

在主体上使用.no-js类,并基于.no-js父类创建非javascript样式。如果禁用了javascript,则将获得所有非javascript样式;如果有JS支持,则将替换.no-js类,从而照常提供所有样式。

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

通过modernizr 在HTML5样板http://html5boilerplate.com/中使用的技巧,但您可以使用一行JavaScript来替换类

Noscript标记还可以,但是为什么可以使用CSS完成HTML中的多余内容

十三泡芙猿 2020.03.11

我建议您通过编写不引人注目的JavaScript进行其他选择。

使项目功能对禁用了JavaScript的用户有效,完成后,实现JavaScript UI增强。

https://en.wikipedia.org/wiki/Unobtrusive_JavaScript

Davaid番长 2020.03.11

这是对我有用的方法:如果禁用了javascript,它将重定向访客

<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>
小宇宙泡芙 2020.03.11

如果您的用例是您拥有一个表单(例如,登录表单),并且服务器端脚本需要知道用户是否启用了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。如果您的服务器端脚本得到0,则没有JS。如果得到1,JS!

ProItachi 2020.03.11

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则意味着是JS被禁用。这两个示例都相当琐碎并且易于操作,但是您明白了。

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

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

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

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

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android