解决WP-UserAgent插件与Win8.1+IE11的兼容性问题

本站目前一直采用WP-UserAgent插件显示评论用户的操作系统以及浏览器信息,但是随着Windows 8.1及IE 11的推出,这个插件并没有及时更新以支持Windows 8.1以及IE 11的信息显示。

(类似问题在以前曾经遇到过,当时用的另一个UserAgent显示插件,但是无法支持显示Win8,正是这个原因迫使我换用了WP-UserAgent。)

WP-UserAgent-Win8-IE11-1
可以看到显示为Mozilla以及Windows

原因除了作者不更新之外,还有一方面就是IE11更改了自己的UserAgent,移除了UserAgent之中的MSIE字样,这便使得基于UserAgent字符串判断浏览器类型的代码无法正常工作。

这是Win8.1 x32 +IE 11的UserAgent:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

可以看到,相比于IE10的UserAgent( Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0) )少了MSIE的字样。

除了等待插件作者更新之外,这里提供临时的解决方案。要注意的是这个方案并没有经过更广泛的测试,不能保证可以正常工作。

关于操作系统的判断,需要修改位于插件根目录用于判断操作系统的wp-useragent-detect-os.php

用文本编辑器打开,搜索并定位到Windows,接着在

if(preg_match('/Windows NT 6.2; Win64; x64;/i', $useragent)

段的if之前加上else,使之变为elseif,改完后如下:

elseif(preg_match('/Windows NT 6.2; Win64; x64;/i', $useragent)

然后,在前面插入如下代码:

if(preg_match('/Windows NT 6.3; Win64; x64;/i', $useragent)
    || preg_match('/Windows NT 6.3; WOW64/i', $useragent))
{
     $title="Windows 8.1 x64 Edition";
     $code="win-5";
}
elseif(preg_match('/Windows NT 6.3/i', $useragent))
{
     $title="Windows 8.1";
     $code="win-5";
}

这样操作系统的判断就添加完成了。

关于IE11的支持,需要修改位于插件根目录用于判断操作系统的wp-useragent-detect-webbrowser.php

用文本编辑器打开,搜索并定位到Mozilla(靠近文件尾部)。

将下面的一整段

elseif(preg_match('/Mozilla/i', $useragent))
	{
		$link="http://www.mozilla.org/";
		$title="Mozilla Compatible";

		if(preg_match('/rv:([.0-9a-zA-Z]+)/i', $useragent, $regmatch))
		{
			$title="Mozilla ".$regmatch[1];
		}

		$code="mozilla";
	}

替换为

elseif(preg_match('/Mozilla/i', $useragent))
{
      if(preg_match('/rv:(11.0)/i', $useragent, $regmatch))
      {
	$link="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx";
		$title="Internet Explorer 11.0";
		$code="msie10";
      }
      elseif(preg_match('/rv:([^11]...)/i', $useragent, $regmatch))
      {
	$link="http://www.mozilla.org/";
	$title="Mozilla ".$regmatch[1];
	$code="mozilla";
	}	
}

原理就是,把原来识别UserAgent为Mozilla浏览器的正则表达式改为如果搜索到11.0(IE11的UserAgent中的特征)就识别为IE11,否则还识别为Mozilla。经过测试,正如你在这里看到的,IE11的识别已经正常了。但是至于会不会对Mozilla的浏览器识别造成影响,由于没有条件做测试,于是不得而知。

对于不想修改的人来说,这里提供已经修改的插件文件,下载后解压覆盖到WP-UserAgent插件目录即可。

目前,插件已经更新,请升级(从后台直接升级或手动覆盖升级)安装新版即可。

发布者

《解决WP-UserAgent插件与Win8.1+IE11的兼容性问题》上有6条评论

  1. 好评……
    当初为了一些需求把 WP-PostView 照着重写了一遍,后来干脆直接整合到模板里,现在对这几个文件特悉 ……

    Google Chrome 11.0.696.34 Google Chrome 11.0.696.34 GNU/Linux x64 GNU/Linux x64

发表评论

电子邮件地址不会被公开。 必填项已用*标注