乐闻世界logo
搜索文章和话题

如何检测 javascript 是否被禁用?

7 个月前提问
3 个月前修改
浏览次数94

6个答案

1
2
3
4
5
6

在HTML页面中,如果用户的浏览器禁用了JavaScript,你可以使用 <noscript>标签来显示一条替代性的信息。例如:

html
<!DOCTYPE html> <html> <head> <title>检测JavaScript是否启用</title> </head> <body> <!-- 如果JavaScript被启用,下面的内容将会被显示 --> <script type="text/javascript"> document.write("JavaScript已经被启用!"); </script> <!-- 如果JavaScript被禁用,<noscript>里的内容将会被显示 --> <noscript> <p>JavaScript被禁用了。本网站的某些功能可能无法正常工作,请启用JavaScript。</p> // 或者 <meta http-equiv="refresh" content="0; url=whatyouwant.html" /> </noscript> </body> </html>

上面的例子展示了当JavaScript被禁用时,页面会展示 <noscript>标签里面的内容。如果JavaScript是启用的,<script>标签内的代码会被执行,并且页面会显示“JavaScript已经被启用!”的消息。

请注意,使用 <noscript>标签只是一种给用户提示信息的简单方式,并不是一种程序化的检测方法。如果你需要在服务器端检测JavaScript是否被禁用,通常需要使用不依赖于JavaScript的后备方法,比如通过表单提交来判断,因为没有JavaScript支持,异步的JavaScript请求(例如使用Ajax)将不会发生,只能依靠传统的同步请求。

2024年6月29日 12:07 回复

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

对我来说,首选的例子是发布某种“如果没有 Javascript,这个网站就不能正常工作”的消息,问题是您需要确保您的网站在没有 Javascript 的情况下也能正常工作。一旦你开始走这条路,你就会开始意识到网站应该是防弹的,并且关闭 JS,这是一大堆额外的工作。

所以,你真正想要的是“重定向”到一个页面,上面写着“打开 JS,傻瓜”。但是,当然,您无法可靠地进行元重定向。所以,这是建议:

shell
<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 来说足够好,那么对我的小网站来说也足够好。

2024年6月29日 12:07 回复

我假设您正在尝试决定是否提供 JavaScript 增强内容。最好的实现会彻底降级,以便网站在没有 JavaScript 的情况下仍然可以运行。我还假设您指的是服务器端检测,而不是<noscript>出于无法解释的原因使用该元素。

没有好的方法来执行服务器端 JavaScript 检测。作为替代方案,可以使用 JavaScript 设置 cookie,然后在后续页面视图中使用服务器端脚本测试该 cookie。然而,这不适合决定要传送什么内容,因为它无法将没有 cookie 的访问者与新访问者或不接受 JavaScript 设置 cookie 的访问者区分开来。

2024年6月29日 12:07 回复

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

shell
<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,您可以执行以下操作:

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

然后检查您的访问日志以查看该图像被点击了多少次。这是一个稍微粗糙的解决方案,但它会给您一个关于用户群百分比的好主意。

上述方法(图像跟踪)对于纯文本浏览器或根本不支持 js 的浏览器不太适用,因此如果您的用户群主要转向该领域,这可能不是最好的方法。

2024年6月29日 12:07 回复

这对我有用:如果禁用 javascript,它会重定向访问者

shell
<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>
2024年6月29日 12:07 回复

你的答案