IE和兼容模式,为什么它会混淆浏览器识别脚本?

时间:2012-01-09 12:48:11

标签: php internet-explorer ie8-compatibility-mode

我在下面有一个使用$_SERVER['HTTP_USER_AGENT']的脚本,因为get_browser()在服务器上没有活动,并且所述服务器(hotgator)的管理员不会为我激活它。

话虽这么说,我在Windows XP(VM机器测试平台)中运行IE 8,当我在兼容模式下运行IE 8 IE在下面的脚本中显示为IE 7,而不是IE 8.为什么?

<?php
//This is a script that will identify the OS and browser you are using.
// This also has a fix in where Chrome shows up as Chrome, 
// and not show up as Safari by accident. 



//Booleans to set OS and Browser to False.
$os = false;
$browser = false;
//Booleans for Web Browser & OS Functions.
$info = $_SERVER['HTTP_USER_AGENT'];
$xp = 'Windows NT 5.1';
$vista = 'Windows NT 6.0';
$win7 = 'Windows NT 6.1';
$ubuntu = 'Ubuntu';
$ie106 = 'ie106';
$ie10 = 'ie10';
$ie9 = 'ie9';
$ie8 = 'MSIE 8.0;';
$ie7b = 'MSIE 7.0b;';
$ie7 = 'MSIE 7.0;';
$chrome = '/Chrome/';
$safari = '/Safari/';
$firefox = '/Firefox/';


//Operating Systems
if (stristr($info, "Windows NT 5.1")) {echo 'You are using a Windows XP Operating System ';}
if (stristr($info, "Windows NT 6.0")) {echo 'You are using a Windows Vista Operating System ';}
if (stristr($info, "Windows NT 6.1")) {echo 'You are using a Windows 7 Operating System ';}
if (stristr($info, "Ubuntu")) {echo 'You are using an Ubuntu Operating System ';}
if (stristr($info, "Mac OS")) {echo 'You are using a Macintosh Operating System ';}


//Web Browsers
if (stristr($info, "Chrome") !== FALSE) {stristr($info,"Safari");
        $chrome = 'Chrome';
            echo 'with a Chrome Web Browser ';}
elseif (stristr($info, "Safari")) {echo 'with a Safari Web Browser ';}
if (stristr($info, "Firefox")) {echo 'with a Firefox Web Browser ';}
if (stristr($info, "MSIE 7.0;")) {echo 'with a Internet Explorer 7.0 Web Browser ';}
if (stristr($info, "MSIE 7.0b;")) {echo 'with a Internet Explorer 7.0b Web Browser ';}
if (stristr($info, "MSIE 8.0;")) {echo 'with a Internet Explorer 8.0 Web Browser ';}
if (stristr($info, "MSIE 9.0;")) {echo 'with a Internet Explorer 7.0 Web Browser ';}
if (stristr($info, "MSIE 10.0;")) {echo 'with a Internet Explorer 7.0 Web Browser ';}
if (stristr($info, "MSIE 10.6;")) {echo 'with a Internet Explorer 7.0 Web Browser ';}



//If OS or Browser not found in list.
if ($ubuntu || $xp || $vista || $win7)
$os = true;

if($firefox || $chrome || $safari || $ie9 || $ie8)
$browser = true;

if(!$browser || !$os){

echo'<strong>';
echo '<br />' . $_SERVER['HTTP_USER_AGENT'] . '<br />Please copy and paste the text above and send it to your web administrator. It will explain everything he/she needs to do.';}

?>

2 个答案:

答案 0 :(得分:3)

这是因为在兼容模式下,IE8会回退到IE7渲染,以便与专为旧浏览器设计的网站兼容。因此,它需要向Web服务器标识自己,以便站点返回正确的内容,如果它们为不同版本的Web浏览器提供不同的内容。

兼容模式为explained on the MSDN blog

答案 1 :(得分:1)

我相信“兼容模式”完全模拟IE7,这就是为什么它如此调用。为什么 - 问问MS。