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

标签 javascript

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

判断浏览器的代码是-

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,但我从未看到模式被显示。如果我在 ie 的 case 语句中添加警报,它也永远不会显示。我错过了什么?

最佳答案

您遇到了多个问题。

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

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

关于Javascript Switch 语句未提供正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023166/

相关文章:

Javascript 通用 For 循环

javascript - 查询选择方法 -.ready() 与实用方法 - $.ready()

javascript - <select> 选项在更改页面后保持不变

javascript - Visual Studio 2015 CTP 在 javascript 编辑器上卡住

javascript - 即使调用了 React 组件方法,expect(...).toHaveBeenCalled() 也会失败

javascript - 类型错误 : Cannot read property “0” from undefined

javascript - 使用 materializecss 进行滑动导航的过渡?

javascript - 如何使用 Angular 1.5 服务

javascript - 无法在 Liferay Portlet JSP 页面中包含 css 和 JS 文件

javascript - 将 <p>paragraph</p> 添加到 div 中,但如果该 div 已有 2 个段落,则创建一个新 div