2009-08-19 7 views
4

IE8は必要な場合IE7モードに移行できます。 jQueryはこれをどのように検出しますか?具体的には、$.browser.versionの値は何ですか?

答えて

8

IE7モードのIE8はIE7を報告します。 しかし、ユーザーエージェントを分析して "Trident/4.0"をチェックすることができます。あなたは、この行が表示された場合、あなたはIE8

+0

「IE7標準モード」のIE 8では、$ .browser.versionから「8.0」が報告されます。 – bart

6

$.browser obejctは、ブラウザ盗聴という概念を使用して入力されます。簡単に言えば、これは、ブラウザ、ロボット、およびページにアクセスする他の人が送信するユーザーエージェント文字列からデータをスキャンするプロセスです。

ユーザエージェントの偽造に対する脆弱性のため、このオブジェクトはjQueryの後のバージョンでは非推奨です。オブジェクト検出と機能検出($.supportを参照)が優先使用されるようになりました。

たとえば、Opera 8.5。 IEのように自分自身を識別するために使用される: http://www.javascriptkit.com/javatutors/navigator.shtml

$ .support:

http://docs.jquery.com/Utilities/jQuery.support

ユーザーエージェント:

http://en.wikipedia.org/wiki/User_agent

http://www.zytrax.com/tech/web/browser_ids.htm

オブジェクト検出:

http://www.quirksmode.org/js/support.html http://developer.apple.com/internet/webcontent/objectdetection.html

ブラウザスニッフィング:

http://en.wikipedia.org/wiki/Browser_sniffing

特徴検出:

http://docs.jquery.com/Utilities/jQuery.support

+1

これはうれしいことですが、IEが 'inline-block'を正しくサポートしているかどうかは、' support'プロパティの中からわかりますか? 'leadingWhitespace、tbody、objectAll、htmlSerialize、スタイル、href正規化、不透明度、cssFloat、scriptEval、noCloneEvent、boxModel' – nickf

+0

それらのいずれかがあるかどうかは不明です。 .support関数を拡張しようとすることもできます(例:http://www.waytoocrowded.com/2009/03/14/jquery-supportminheight/)。あるいはこれをすでに拡張している人さえいるかもしれません。しかし、これは私には分かりません。 –

1

JQueryは、ブラウザからの指示を見ることしかできません。

IE7モードでは、ブラウザはIE7として自身を報告するため、JQueryに表示されます。

+1

そして、ブラウザが嘘をつくことを教えてください –

+0

まあ、種類... IE7モードでは、ブラウザが本当にIE7であるかのようにすべきです。ブラウザは、プログラムの実際のバージョンではなく、レンダリングエンジンのバージョンを報告しています。 – Guffa

0

で動作する私は、.NET開発者だと私はいつもこのkind'a問題

はそれを使用すること自由に落ちたために、私が作成したSessions.aspxページを使用するように、Iコードを共有することもできます。

私が作成したばかりのスクリーンキャスト(14秒)でわかるように、JavaScriptのナビゲータプロパティでMSIE 8とMSIE 7を指定すると、ページをレンダリングするエンジンがわずかに異なるため互換モードを変更すると変更されます(100%IE7エンジンではないことを覚えておいてください!代わりの方法でjQueryのBUITを使用する)

、ちょうど

IE8 IE7モードで通常のJavaScriptを使用

4.0(互換; MSIE 7.0;のWindows NT 6.0; WOW64。 Trident/4.0、GTB6、SLCC1、.NET CLR 2.0.50727、Media Center PC 5.0、.NET CLR 3.0.30618、.NET CLR 3.5.30729、InfoPath.2、OfficeLiveConnector.1.4、OfficeLivePatch.1.3)

ネイティブモードでIE8

4.0(互換。 MSIE 8.0 012; Windows NT 6.0; WOW64;トライデント/ 4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30618; .NET CLR 3.5.30729; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)

コード:

var browserVersion = navigator.appVersion.toLowerCase(); 
if(browserVersion.contains('msie 8')) { 
    // IE 8 
} 
else if(browserVersion.contains('msie 7')) { 
    // IE 7 
} 

スクリーンキャストビデオhttp://www.balexandre.com/temp/showFlash.aspx?swf=2009-08-19_1138_ie8ie7.swf&w=952&h=742

+1

うわー、そのセッションのページは、いつもより古くなっています – Kloar

+0

が良いでしょうか? – balexandre

2

私はちょうど自分自身をこれをテストした(ちょうどIE8をダウンロードした)

にIE8をmet7と互換性のあるモードにするとこのようなタグは:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

$.browser.versionの値がまだ 8.0です!

関連する問題