Javascript Switch语句未提供正确的结果

时间:2014-11-19 17:28:45

标签: javascript

我正在尝试检测Web应用程序的浏览器和浏览器版本

确定浏览器的代码是 -

function get_browser() {
    var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if (/trident/i.test(M[1])) {
        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE ' + (tem[1] || '');
    }
    if (M[1] === 'Chrome') {
        tem = ua.match(/\bOPR\/(\d+)/)
        if (tem != null) { return 'Opera ' + tem[1]; }
    }
    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
    if ((tem = ua.match(/version\/(\d+)/i)) != null) { M.splice(1, 1, tem[1]); }
    return M[0];
}

确定版本的代码是 -

function get_browser_version() {
    var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if (/trident/i.test(M[1])) {
        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE ' + (tem[1] || '');
    }
    if (M[1] === 'Chrome') {
        tem = ua.match(/\bOPR\/(\d+)/)
        if (tem != null) { return 'Opera ' + tem[1]; }
    }
    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
    if ((tem = ua.match(/version\/(\d+)/i)) != null) { M.splice(1, 1, tem[1]); }
    return M[1];
}

其余代码是 -

var browser = get_browser().toLowerCase();
var browser_version = get_browser_version();

alert(browser, browser_version);

switch (browser) {
    case 'safari':
        if (browser_version < 5) {
            $('#BrowserVersionModal').modal('show');
        }
        break;
    case 'firefox':
        if (browser_version < 28) {
            $('#BrowserVersionModal').modal('show');
        }
        break;
    case 'ie':
        if (browser_version < 9) {
            $('#BrowserVersionModal').modal('show');
        }
        break;
    case 'opera':
        if (browser_version < 6) {
            $('#BrowserVersionModal').modal('show');
        }
        break;
    default:

}

警告表示浏览器是ie且版本是11但我从未看到模式显示。如果我在case语句中为ie添加一个警告,它也永远不会显示。我错过了什么?

4 个答案:

答案 0 :(得分:2)

这里有多个问题。

浏览器检查中的

return 'IE ' + (tem[1] || '');不会在区分大小写的switch语句中为您提供与“ie”匹配的内容。

另一个问题是,如果版本为11,browser_version < 9将不会评估为真。

答案 1 :(得分:0)

使用

case 'ie':
    if (browser_version < 9) {
        $('#BrowserVersionModal').modal('show');
    }
    break;

你说 - 如果它是IE并且小于9 - 那么即不触发11,因为它是&gt; 9

答案 2 :(得分:0)

我认为因为版本是11,条件if (browser_version < 9)将为假,因此模态不会显示。

答案 3 :(得分:0)

尝试遵循;

var versions = {
  ie: 9,
  opera: 6,
  firefox: 28,
  safari: 5
};

if(!versions[browser]) {
  alert('Unknown browser: '+browser);
} else if (browser_version < versions[browser]) {
  alert('poor browser');
} else {
  alert('good browser');
}