检测访客浏览器的2种方法

日期: 标签:Web经验网页设计
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
文章目录

我想,大凡真正写过网页的人都有被IE折磨过的历史,对IE,尤其是IE 6已经恨之入骨,可能大家跟我都有这样一个梦想:IE绝迹了多好!可惜这只能停留在幻想的阶段。

为了把 Internet Explorer 给揪出来,我们需要检测访客的浏览器Browser类型。例如,你制作的网页在 Internet Explorer 中无法正常运行,或者你已经对 Internet Explorer 完全死心了,这时你可以阻止 Internet Explorer 用户访问你的网站,如ProjeKt D.K is loading,作者并不欢迎你使用 IE 浏览他的网站,所以你还是换个浏览器吧。

当然了,完全阻止IE用户访问的做法还是太极端了,有时候我们只是想限制或只允许IE用户访问某部分的内容,如:只给使用 IE 的用户显示广告。那怎样达到我们的目的呢?目前我知道的有两种,一种是用 JS 检测,另一种是使用PHP,第一种的适用范围更广些。

一、JS浏览器检测

首先给出w3school提供的 JS 检测方法:

检测浏览器及版本
使用 JavaScript 检测关于访问者的浏览器名称及其版本。
检测浏览器的更多信息
使用 JavaScript 检测关于访问者浏览器的更多信息。
检测浏览器的全部信息
使用 JavaScript 检测关于访问者浏览器的全部信息。
根据浏览器类型提醒用户
使用 JavaScript 检测关于访问者的浏览器名称及其版本,然后根据这些信息生成不同内容的警告框。

虽然上面提供的JS很高明,但是也只能判断IE与非IE,因为如果你使用的 firefox 或者 chrome ,获得的浏览器名称统统都是 Netscape,那有没有更好的办法呢?方法当然有,其实可以用以下代码实现:

<html>
<head>
	<title>JavaScript检测浏览器</title>
</head>
<body>
<script type="text/javascript">
	var userAgent=navigator.userAgent.toLowerCase(), s, o = {};   
	var browser={
		version:(userAgent.match(/(?:firefox|opera|safari|chrome|msie)[\/: ]([\d.]+)/))[1],
		safari:/version.+safari/.test(userAgent),
		chrome:/chrome/.test(userAgent),
		firefox:/firefox/.test(userAgent),
		ie:/msie/.test(userAgent),
		opera: /opera/.test(userAgent ) 
	} /* 获得浏览器的名称及版本信息 */

	if (browser.ie && browser.version > 6)
	{
	  /* 判断是否为IE 6以上版本,是则执行以下操作 */
	  document.writeln("<p>您使用的是IE "+browser.version+"<\/p>");
	}
</script>
</body>
</html>

通过以上代码的注释,你也大概知道怎么了吧。注意:if中的browser.version > 6版本判断只能用于 IE,其他浏览器的版本不能这么判断,目前还找不到一个解决的办法。如果你想让if判断成功后执行一段 html 代码,那么你可以在if后面的{}中填上 html 转换成 js 后的代码。下面提供的几个典型的浏览器判断语句:

if (browser.safari) {}  /* 判断是否为safari */
if (browser.firefox) {} /* 判断是否为firefox */
if (browser.chrome) {}  /* 判断是否为chrome */
if (browser.opera) {}   /* 判断是否为opera */
if (browser.ie) {}      /* 判断是否为IE */

二、PHP 浏览器检测

使用 PHP,我们可以通过$_SERVER["HTTP_USER_AGENT"]来检测浏览器类型。以下是一个范例。

<html>
<head>
	<title>PHP 浏览器检测</title>
</head>
<body>
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE") ) : ?>

<!-- 这里就填上你要在IE中执行的html代码吧 -->

<?php endif; ?>
</body>
</html>

其他几个if判断语句:

<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 8.0") ) : ?>     
/* IE 8 */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 7.0") ) : ?>    
/* IE 7 */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 6.0") ) : ?>     
/* IE 6 */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "NetCaptor") ) : ?>    
/* Netscape */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Netscape") ) : ?>     
/* Netscape */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Lynx") ) : ?>         
/* Lynx */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Opera") ) : ?>       
 /* Opera */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Konqueror") ) : ?>    
/* Konqueror */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Mozilla/5.0") ) : ?>  
/* Mozilla/5.0 */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Firefox") ) : ?>  
/* Firefox */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Firefox/3") ) : ?>  
/* Firefox 3.0*/
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Firefox/2") : ?>  
/* Firefox 2.0 */
<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "Chrome") : ?>  
/* Chrome */

下面给个小小的应用。我们可以给 IE 6.0 的访客弹出一个警告窗口,在 </body> 之前加上以下代码即可:

<?php if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 6.0") ) : ?>  
<script type="text/javascript">
  alert("还在用Internet Explorer 6 ? 你OUT了,赶快升级吧!")
</script>
<?php endif; ?>

好了,我知道的也就这么多了,能分享的也跟大家分享了,希望在大家以后的网站建设中能有所帮助。另外,如果你还有不明白的地方,可以在此发表评论,能够解决的我一定帮助解决。

参考资料:

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/2-way-to-detect-browser.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者。

9 条留言

点此留言
  1. 二道贩子 二道贩子

    很好的代码,正是我在找的内容,先用一下,特意感谢一下。

  2. 蓝色离子

    找的我好辛苦啊!谢谢啦!哈哈!

  3. 小谭 小谭

    IE6会被消灭的吧,随着win7用户的逐渐增多,马上有win8了

    • 侯永禄 侯永禄

      @小谭 IE6会被消灭,太乐观了吧?看看周围上网的人,有几个知道什么叫做浏览器?如果他们想知道什么叫浏览器,他们会上百度,然后搜索 “什么是浏览器”,点了前几个竞价搜索链接后,会高呼:搜得太准了!………………当你去了解周围大部分人的上网方式后,或许就能明白消灭IE6有多难。每当同人家说起浏览器,我忽然发现我才是网络难民

  4. 沐

    哇,终于找到了!

  5. zhangyuqin

    不错的判断代码,支持了!

  6. Lujax

    博主您好,請問是否有辦法紀錄訪客,看過文章的訪客顯示帳號在文章下方,找了很多外掛找不到,不知道是否能做到!

    • 露兜

      @Lujax 目前没法有现成的外挂。
      因为访客不一定是你网站的注册用户,所以即使记录也只能记录用户的ip

发表留言