2012-01-09 2 views
1

get_browser()이 서버에서 활성화되어 있지 않아 해당 서버 (hotgator)의 관리자가 저를 위해 활성화하지 않았기 때문에 $_SERVER['HTTP_USER_AGENT']을 사용하는 스크립트가 있습니다.IE 및 호환 모드, 브라우저 식별 스크립트가 왜 엉망입니까?

호환성 모드에서 Internet Explorer 8을 실행하면 Windows XP (VM 컴퓨터 테스트 베드)에서 Internet Explorer 8이 실행되고 있습니다. Internet Explorer 8 대신 Internet Explorer 7이 아래 스크립트에 표시됩니다. 왜 그렇습니까?

<?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

호환성 모드에서 Internet Explorer 8 (및 9)을 실행하는 것이 Internet Explorer 7을 실행하는 것과 같기 때문에? –

+0

IE7 에뮬레이션 모드는 브라우저가 IE7을 에뮬레이트하기 때문에 발생합니다. – GordonM

답변

3

호환성 모드에서 IE8은 이전 브라우저를 위해 특별히 고안된 사이트와 호환되도록 IE7 렌더링으로 다시 떨어지기 때문입니다. 따라서 다른 버전의 웹 브라우저에 대해 서로 다른 콘텐츠를 제공하면 사이트가 올바른 콘텐츠를 반환하도록 웹 서버 자체를 식별해야합니다.

호환 모드는 explained on the MSDN blog입니다.

+0

그리고 IE7과 같은 페이지 만 렌더링하면 실제로 유용 할 수 있습니다. – DampeS8N

+0

@ DampeS8N 그게 내 대답에 링크 된 기사에서 볼 수있는 원래의 IE7 렌더링 엔진을 실제로 사용하지 않고 IE7 만 에뮬레이트합니다. – Treffynnon

+0

[차이점을 에뮬레이트합니다. 즉, 코드 작성에 새로운 것을 추가하는 대신 코드 작성에 새로운 것을 추가했음을 의미합니다.] (http://blogs.msdn.com/b/ie/archive/2009/03/12/site-compatibility-and) -ie8.aspx) – DampeS8N

1

나는 "호환성 모드"가 IE7을 완전히 에뮬레이트한다고 믿는다. 왜? MS에 문의하십시오.

관련 문제