今天早上有个帖子问有多少人禁用JavaScript。然后我开始想知道可以使用什么技术来确定用户是否禁用了它。
有人知道一些简单的方法来检测JavaScript是否被禁用吗?我的意图是给一个警告,如果浏览器没有启用JS,站点将无法正常运行。
最终,我想把它们重定向到能够在没有JS的情况下工作的内容,但我需要这个检测作为一个占位符来开始。
今天早上有个帖子问有多少人禁用JavaScript。然后我开始想知道可以使用什么技术来确定用户是否禁用了它。
有人知道一些简单的方法来检测JavaScript是否被禁用吗?我的意图是给一个警告,如果浏览器没有启用JS,站点将无法正常运行。
最终,我想把它们重定向到能够在没有JS的情况下工作的内容,但我需要这个检测作为一个占位符来开始。
当前回答
我假设您正在决定是否交付javascript增强的内容。最好的实现能够干净地降级,因此站点在没有JavaScript的情况下仍然可以运行。我还假定您指的是服务器端检测,而不是出于某种无法解释的原因使用<noscript>元素。
没有执行服务器端JavaScript检测的好方法。作为一种替代方法,可以使用JavaScript设置一个cookie,然后在后续的页面视图中使用服务器端脚本测试该cookie。然而,这并不适合决定要传递什么内容,因为它无法区分没有cookie的访问者与新访问者或不接受JavaScript集cookie的访问者。
其他回答
为什么需要知道服务器端是否启用了JavaScript ?浏览器支持哪种变体有关系吗?它是否需要理解关键字let或者只是var ?
我建议发送可读的内容,不需要任何JavaScript可访问,然后只是尝试加载JS文件添加所有你想要的JS行为。
For example, the UI might end up missing Login or Modify button if JS is not enabled and it might include a small text at the bottom (using <noscript> or some element with CSS animation that shows the text after a small delay if JS code doesn't remove the whole element soon enough) saying "To login/modify this content, you must enable JavaScript support in your browser." If you do this well, the reader may not even notice that anything is missing unless he or she is trying to login or modify the content.
作为一种优化,你可以用JavaScript设置cookie,如果你想异步获取它,服务器可以避免发送非JavaScript可读的内容。只是要确保在JS代码运行完成至少一次之后才设置这个cookie,而不是在JS代码开始运行时立即设置它,以确保当JS代码由于任何原因失败时(不是如果!)最终用户不会以空白屏幕结束。
(请注意,异步加载初始页面状态不会更快地将内容传递给最终用户。但是,如果没有JavaScript,您只能发送全部内容的一部分。这可以更快地呈现“优先”,然后使用JS代码异步加载页面的其余部分。)
作为一个额外的好处,搜索引擎仍然可以在不启用任何JavaScript的情况下索引您的站点。
<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!如果它工作,它被启用,如果没有,那么它不是…
这是为我工作:它重定向访问者如果javascript被禁用
<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>
我昨天解决了同样的问题,所以我在这里加上。001。解决方案对我来说很有效至少在主页(index。php)
我希望根文件夹中只有一个文件:index.php。然后我使用文件夹来组织整个项目(代码,css, js等)。所以index.php的代码如下:
<head>
<title>Please Activate Javascript</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
</head>
<body>
<script language="JavaScript">
$(document).ready(function() {
location.href = "code/home.php";
});
</script>
<noscript>
<h2>This web site needs javascript activated to work properly. Please activate it. Thanks!</h2>
</noscript>
</body>
</html>
希望这对大家有所帮助。致以最亲切的问候。
在meta noscript内部添加刷新不是一个好主意。
因为noscript标签不符合XHTML 属性值“Refresh”是非标准的,不应该使用。“刷新”将页面的控制权从用户手中夺走。使用“刷新”将导致W3C的Web内容可访问性指南失败 ——参考http://www.w3schools.com/TAGS/att_meta_http_equiv.asp。