最近把显示访客浏览器和操作系统的插件给换掉了,以前用的是很多人都推荐的 Comment Info Detector。 无奈作者一年多都没有更新了,而且我也不需要其中的国别显示的flag,因此就换成了更加轻量级的 wp-useragent,从使用的效果上来看,对于访客的浏览器好操作系统识别也更加细致一些。

一、原理

从原理上看,此类插件都是通过读取MySQL数据库里面的wp_comments table,把其中UserAgent字段读出来,然后通过一系列正则表达式匹配,经常用到的函数诸如preg_match('/Windows NT 6.1/i', $ua)等php函数,最终剥离出访问者的浏览器和操作系统的及其对应的版本号剥离过程。

二、WP-UserAgent的特点

1.支持的浏览器和操作系统更多

从图标文件来看,Comment Info Detector的浏览器和操作系统加起来是85个,而WP-UserAgent光是浏览器就有104个。从代码上看WP-UserAgent相比Comment Info Detector正则表达式判断也更加细致。其中包含了Theworld和Maxthon之类的浏览器、甚至连知名度很低的GreenBrower也有,国内手机常用的UCWEB也不放过。支持iphone和android等系统…等等。

支持各种手持设备小众设备UA

还可以显示部分Trackbacks的来路信息。

2.显示更加准确

支持更多的同时也意味着更加准确,从上图看来,Mac上的Safari显示也以前靠谱。对于IE,作者还特地加入通过判断核心版本号和Layout Engine Trident的版本号达到判断IE是否运行在兼容模式语句,不可谓不细致入微。

if(strtolower($title)=="msie" && strtolower($version)=="7.0" && preg_match('/Trident\/4.0/i', $useragent))
		return " 8.0 (Compatibility Mode)"; //fix for IE8 quirky UA string with Compatibility Mode enabled

UserAgent实例:IE8兼容模式

3.支持显示详细UA信息和大图标

这个很无聊,无异于将后台UA串显示出来,不建议开启。如果博客布局适合大图标的话也可以开启大图标。

三、WP-UserAgent的缺点及修改策略

WP-UserAgent也不是事事完美,在我看来有两点难以忍受。

1.IE图标

首先是16px大小的IE图表实在是太丑了,一个蓝色的球球,很是无语,估计是作者批量缩放时候用错算法了吧,更改这个很简单,直接替换一个同文件名的正常的图标即可。

msie-ugly->msie8

2.IE9的支持

其次是作为国内使用用户最多的IE,作者虽然将其版本号能正常显示出来,但是却没有对不同版本号的IE做区分判断,统一使用蓝色球球图标,真实丑到崩溃啊。直接上修改代码。

	}elseif(preg_match('/MSIE\s*9\.0/i', $useragent)){
		$link="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx";
		$title="Internet Explorer".detect_browser_version("MSIE");
		$code="msie9";
	}elseif(preg_match('/MSIE\s*7\.0/i', $useragent) || preg_match('/MSIE\s*8\.0/i', $useragent)){
		$link="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx";
		$title="Internet Explorer".detect_browser_version("MSIE");
		$code="msie8";
	}elseif(preg_match('/MSIE/i', $useragent)){
		$link="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx";
		$title="Internet Explorer".detect_browser_version("MSIE");
		$code="msie";

wp-useragent.php加上高亮部分,即可,HOHO,现在连IE9都支持啦!

四、修改Comment Info Detector也支持IE9

顺便看了一下Comment Info Detector的代码,顺手也改了。

browser.php中,直接加入高亮部分即可

	} elseif (preg_match('#MSIE ([a-zA-Z0-9.]+)#i', $ua, $matches)) {
		$browser_name = 'Internet Explorer';
		$browser_ver = $matches[1];
		if ( strpos($browser_ver, '9') !== false )
			$browser_code = 'ie9';
		elseif ( strpos($browser_ver, '7') !== false || strpos($browser_ver, '8') !== false)
			$browser_code = 'ie8';
		else
			$browser_code = 'ie';
		list($os_name, $os_code, $os_ver, $pda_name, $pda_code, $pda_ver) = CID_windows_detect_os($ua);

最后放出效果图
IE9 访客修改前

IE9 访客修改后