1

こんにちは、JavaScript を介してブラウザのバージョンを検出する必要があります。ここから、私は期待したものを得ることができます。ただし、localhost 経由とホスト名経由でページにアクセスすると、返されるバージョンが異なります。

以下のソースで簡単な HTML ページ (BrowserVersion.html) を作成します。

<html>
<script>

var BrowserDetect = {
    init: function () {
    this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
    this.version = this.searchVersion(navigator.userAgent)
    || this.searchVersion(navigator.appVersion)
    || "an unknown version";
    this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
    for (var i=0;i<data.length;i++) {
    var dataString = data[i].string;
    var dataProp = data[i].prop;
    this.versionSearchString = data[i].versionSearch || data[i].identity;
    if (dataString) {
    if (dataString.indexOf(data[i].subString) != -1)
    return data[i].identity;
    }
    else if (dataProp)
    return data[i].identity;
    }
    },
    searchVersion: function (dataString) {
    var index = dataString.indexOf(this.versionSearchString);
    if (index == -1) return;
    return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
    {
    string: navigator.userAgent,
    subString: "Chrome",
    identity: "Chrome"
    },
    { string: navigator.userAgent,
    subString: "OmniWeb",
    versionSearch: "OmniWeb/",
    identity: "OmniWeb"
    },
    {
    string: navigator.vendor,
    subString: "Apple",
    identity: "Safari",
    versionSearch: "Version"
    },
    {
    prop: window.opera,
    identity: "Opera"
    },
    {
    string: navigator.vendor,
    subString: "iCab",
    identity: "iCab"
    },
    {
    string: navigator.vendor,
    subString: "KDE",
    identity: "Konqueror"
    },
    {
    string: navigator.userAgent,
    subString: "Firefox",
    identity: "Firefox"
    },
    {
    string: navigator.vendor,
    subString: "Camino",
    identity: "Camino"
    },
    { // for newer Netscapes (6+)
    string: navigator.userAgent,
    subString: "Netscape",
    identity: "Netscape"
    },
    {
    string: navigator.userAgent,
    subString: "MSIE",
    identity: "Explorer",
    versionSearch: "MSIE"
    },
    {
    string: navigator.userAgent,
    subString: "Gecko",
    identity: "Mozilla",
    versionSearch: "rv"
    },
    { // for older Netscapes (4-)
    string: navigator.userAgent,
    subString: "Mozilla",
    identity: "Netscape",
    versionSearch: "Mozilla"
    }
    ],
    dataOS : [
    {
    string: navigator.platform,
    subString: "Win",
    identity: "Windows"
    },
    {
    string: navigator.platform,
    subString: "Mac",
    identity: "Mac"
    },
    {
    string: navigator.userAgent,
    subString: "iPhone",
    identity: "iPhone/iPod"
    },
    {
    string: navigator.platform,
    subString: "Linux",
    identity: "Linux"
    }
    ]
    };
    BrowserDetect.init();
    </script>
<script type="text/javascript">
    navigator.sayswho= (function(){
  var N= navigator.appName, ua= navigator.userAgent, tem;
  var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
  if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
  M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
  return M;
 })();
 alert(navigator.sayswho);
 </script>

<html>

以下の URL で上記のページにアクセスすると、MSIE,8.0 という値が取得されます。

http://localhost:8080/docs/BrowserVersion.html, 

しかし、以下の URL で同じページにアクセスすると、MSIE,7.0 という値を取得しています。

http://mylocalhost:8080/docs/BrowserVersion.html

URL の 2 つのバージョン間でブラウザのバージョンが変わる理由。

注:私のホストファイルには以下のエントリがあります

127.0.0.1   localhost
127.0.0.1   mylocalhost

何かご意見は?

4

1 に答える 1

1

ローカル ドメインに対する IE の互換表示を無効にする必要があります。

IE の互換表示設定に移動し、2 番目のオプション「互換表示でイントラネット サイトを表示する」のチェックを外します。


ブラウザ/ブラウザバージョンのDOMオブジェクト検出の非常に基本...

var z = document.getElementsByTagName('body')[0];

if (z.style.MozBinding!=undefined)
{
 browser='Firefox';
}
else if (window.opera)
{
//Opera up to 12.5
}
else if (z.style.scrollbar3dLightColor!=undefined)
{
 browser='msie';
}
else if (z.style.khtmlMarginBottomCollapse!=undefined && z.style.WebkitBorderRadius==undefined) {browser='Safari'; browser_version='2.0';}
else if (z.style.WebkitBorderRadius!=undefined || z.style.khtmlMarginBottomCollapse!=undefined)
{
 if (z.style.item=='function item() { [native code] }')
 {
  browser='Chrome';
 }
 else
 {
  browser='Safari';
 }
}
else if (z.style.KhtmlBorderRadius!=undefined) {browser='Konqueror';
于 2013-09-14T06:37:00.303 に答える