おそらく、ブラウザー間に多少の微妙な JavaScript エンジンの違いがあり、たとえば
if (typeof(someIESpecificFunction) != "undefined")
、try と catch を使用したり
、いくつかの組み込み関数の結果を比較して微妙な違いを見つけたりすることができます。
http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(ECMAScript)とhttp://www.robertnyman.com/javascript/index.htmlが参考になるかもしれません。
更新: もう 1 つのブラウザー バージョン固有の動作:
http://technet.microsoft.com/en-us/library/dd361918.aspxから:
function FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
return "PROXY proxy:80";
else
return "DIRECT";
}
weekdayRange( <day1> [,<day2>] [,<GMT>] ) 関数は、現在のシステム時刻がパラメーター <day1>、<day2>、および <GMT> で指定された範囲内にあるかどうかを返します。最初のパラメーターのみが必要です。GMT パラメータは、ローカル タイム ゾーンではなく GMT で取得される時刻を設定します。
注 <day1> == <day2> で関数が呼び出される場合、以前のバージョンの Internet Explorer では、Netscape Navigator での結果とは異なる結果が得られます。具体的には、以前のバージョンの Internet Explorer はこの日の範囲を 1 週間と解釈していましたが、Internet Explorer 6 と Netscape Navigator はこの範囲を 1 日と解釈していました。たとえば、今日が月曜日の場合、weekdayRange("TUE", "TUE") を呼び出すと、以前のバージョンの Internet Explorer では TRUE が返され、Internet Explorer 6 と Netscape Navigator では FALSE が返されます。
更新 2: http://blogs.msdn.com/b/wndp/archive/2006/07/18/ipv6-wpad-for-winhttp-and-wininet.aspxによると、IE7 と古いものを区別できるはずです。 IE のバージョン (他のブラウザでは、これらの拡張機能がサポートされている場合とサポートされていない場合があります。たとえば、Chrome についてここで言及されています: http://code.google.com/p/pactester/issues/detail?id=9 )
これまでの情報に基づいて、IE 5.5、IE 6、IE 7、IE 8、IE 9 を区別できるはずですか?
そのような便利なものがあればお知らせください。