现在禁用JavaScript的浏览器用户应该很少,但网页编程人员还是需要考虑JS被禁用这个问题,特别是用户提交数据的时候不仅要在前台用JS检验,更要在后台用程序验证,此外,需要提醒用户开启JS以获得良好的网页浏览体验。
在解决如何检测用户是否禁用JS的问题前,首先需要明白两点:
1、JS是位于客户端而不是服务器端,当服务器响应完用户请求返回页面时,连带返回JS资源,这时候服务器没有控制权,对网页的处理权均在客户端了。
2、JS是用来完善用户体验的,网页编程人员不要奢望在没有JS支持下写出同样效果的网页。
要判断用户是否禁用了JS,有两种方法:
一、使用标签noscript
noscript 元素用来定义在脚本未被执行时的替代内容。
此标签可被用于可识别 <script> 标签但无法支持其中的脚本的浏览器。如果浏览器不支持script的代码,则会显示noscript 元素中的内容;如果浏览器支持脚本,那么它不会显示出 noscript 元素中的文本。
完整实例代码如下:
<html>
<head>
</head>
<body>
<noscript>【如果您看见这里的内容,说明您的浏览器不支持或没有启用JS!】<br /></noscript>
Hello World!
</html>
兼容性检查
- Trident(IE内核):IE6、IE7、IE8、IE9均通过
- Gecko(FF内核):火狐检查通过
- Webkit:谷歌检查通过
二、使用JS判断
既然JS都被禁用了,那只能预先设置禁用了JS的提示。
<div id="nojs">【如果您看见这里的内容,说明您的浏览器不支持或没有启用JS!】<br /></div>
要在JS没有被禁用的情况下,不出现这个提示,可以利用JS进行判断,因为此时没有禁用JS,所以JS可以被执行。
设置div不可见,document.getElementById("nojs").style.display="none"
可能有人发现没有效果,有一种可能是因为将该JS代码放在头部或者其他先与div代码的地方,此时因为已经执行了js,后面再显示div,此时js不起作用了。
解决办法有两种:
一是在将js代码放在该div后面
二是有人想把js放在头部,那怎么办呢?我们知道该JS一定要在页面加载完后才能执行,而又要放在该div前面,那可以在js里判断页面是否加载完,即onload。
window.onload = function(){
document.getElementById("nojs").style.display="none";
}
完整实例代码如下:
<html>
<head>
<title>无标题文档</title>
<script language="javascript">
window.onload = function(){
document.getElementById("nojs").style.display="none";
}
</script>
</head>
<body>
<div id="nojs">【如果您看见这里的内容,说明您的浏览器不支持或没有启用JS!】<br /></div>
Hello World!
</body>
</html>
注意,这种方法有一个很大的缺点——在所要加载的网页很大,而且浏览器的工作模式是边加载边渲染时,短时间内能看到这段文字,加载完成后才会消失。
- Trident(IE内核):IE6、IE7、IE8、IE9均通过
- Gecko(FF内核):火狐检查通过
- Webkit:谷歌检查通过
本作品采用 知识共享署名-非商业性使用 3.0 Unported许可协议进行许可。