2012-01-09 29 views
1

get_browser()がサーバー上でアクティブでなく、そのサーバー(hotgator)の管理者が私のためにアクティブ化しないため、$_SERVER['HTTP_USER_AGENT']を使用するスクリプトがあります。IEと互換モード、なぜブラウザ識別スクリプトで混乱しますか?

互換モードでIE 8を実行すると、Windows XP(VMマシンのテストベッド)でIE 8が実行されています。IEはIE 7ではなくIE 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(およびそれ以降)を実行するのは、Internet Explorer 7を実行しているのと同じですか? –

+0

IE7エミュレーションモードではIE7をエミュレートするため、IE7 :) – GordonM

答えて

3

これは、互換モードでIE8がIE7レンダリングに戻って、古いブラウザ用に設計されたサイトと互換性があるからです。したがって、Webサーバーの異なるバージョンに異なるコンテンツを提供する場合、サイトが正しいコンテンツを返すように、Webサーバー自体を識別する必要があります。

互換モードは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に尋ねる。

関連する問題