/* 可配置部分
 ***************************************************************************************/
var webkitVersionUrl = "http:\/\/trac.webkit.org\/browser\/tags\/Safari-%s";

var vi = [
    // chromium主版本号信息
    {
        first:{version:"5.0.307.1", date:"2010年1月。"},
        normal:{version:"5.0.375.55", date:"2010年5月。"},
        last:{version:"5.0.375.127", date:"2010年8月。"}
    },
    {
        first:{version:"6.0.408.1", date:"2010年5月。"},
        normal:{version:"6.0.472.53", date:"2010年9月。"},
        last:{version:"6.0.472.62", date:"2010年9月。"}
    },
    {
        first:{version:"7.0.503.0", date:"2010年8月。"},
        normal:{version:"7.0.517.43", date:"2010年10月。"},
        last:{version:"7.0.517.44", date:"2010年11月。"}
    },
    {
        first:{version:"8.0.552.5", date:"2010年10月。"},
        normal:{version:"8.0.552.215", date:"2010年11月。"},
        last:{version:"8.0.552.237", date:"2011年1月。"}
    },
    {
        first:{version:"9.0.570.1", date:"2010年11月。"},
        normal:{version:"9.0.597.84", date:"2011年2月。"},
        last:{version:"9.0.597.107", date:"2011年2月。"}
    },
    {
        first:{version:"10.0.612.3", date:"2010年12月。"},
        normal:{version:"10.0.648.127", date:"2011年3月。"},
        last:{version:"10.0.648.205", date:"2011年4月。"}
    },
    {
        first:{version:"11.0.686.0", date:"2011年2月。"},
        normal:{version:"11.0.696.57", date:"2011年4月。"},
        last:{version:"11.0.696.77", date:"2011年6月。"}
    },
    {
        first:{version:"12.0.712.0", date:"2011年3月。"},
        normal:{version:"12.0.742.91", date:"2011年6月。"},
        last:{version:"12.0.742.112", date:"2011年7月。"}
    },
    {
        first:{version:"13.0.767.1", date:"2011年5月。"},
        normal:{version:"13.0.782.107", date:"2011年8月。"},
        last:{version:"13.0.782.220", date:"2011年9月。"}
    },
    {
        first:{version:"14.0.794.0", date:"2011年6月。"},
        normal:{version:"14.0.835.163", date:"2011年9月。"},
        last:{version:"14.0.835.202", date:"2011年10月。"}
    },
    {
        first:{version:"15.0.849.0", date:"2011年8月。"},
        normal:{version:"15.0.874.102", date:"2011年10月。"},
        last:{version:"15.0.874.121", date:"2011年11月16日。"}
    },
    {
        first:{version:"16.0.899.0", date:"2011年9月。"},
        normal:{version:"16.0.912.63", date:"2011年12月13日。"},
        last:{version:"16.0.912.77 ", date:"2012年1月23日。"}
    },
    {
        first:{version:"17.0.928.0", date:"2011年11月。"},
        normal:{version:"17.0.963.46", date:"2012年2月8日。"},
        last:{version:"17.0.963.84", date:"2012年3月22日。"}
    },
    {
        first:{version:"18.0.1003.1", date:"2012年1月10日。"},
        normal:{version:"18.0.1025.142", date:"2012年4月30日。"},
        last:{version:"18.0.1025.168", date:"2012年4月30日。"}
    },
    {
        first:{version:"19.0.1041.0", date:"2012年2月14日。"},
        normal:{version:"19.0.1084.52", date:"2012年5月23日。"},
        last:{version:"19.0.1084.56", date:"2012年6月11日。"}
    },
    {
        first:{version:"20.0.1096.1", date:"2012年4月10日。"},
        normal:{version:"20.0.1132.43", date:"2012年6月26日。"},
        last:{version:"20.0.1132.59", date:"2012年7月28日。"}
    },
 {
        first:{version:"21.0.1145.0", date:"2012年5月21日。"},
        normal:{version:"21.0.1180.60", date:"2012年7月31日。"},
        last:{version:"21.0.1180.90", date:"2012年9月24日。"}
    },
    {
        first:{version:"22.0.1207.1", date:"2012年7月16日。"},
        normal:{version:"22.0.1229.79", date:"2012年9月25日。"},
        last:{version:"22.0.1229.94", date:"2012年10月10日。"}
    },
    {
        first:{version:"23.0.1243.2", date:"2012年8月23日。"},
        normal:{version:"23.0.1271.83", date:"2012年9月2日。"},
        last:{version:"23.0.1271.101", date:"2012年12月17日。"}
    },
    {
        first:{version:"24.0.1284.2", date:"2012年10月2日。"},
        normal:{version:"24.0.1312.52", date:"2013年1月10日。"},
        last:{version:"24.0.1312.71", date:"2012年2月14日。"}
    },
    {
        first:{version:"25.0.1359.3", date:"2012年12月13日。"},
        normal:{version:"25.0.1364.97", date:"2013年2月21日。"},
        last:{version:"25.0.1364.172", date:"2013年3月12日。"}
    },
    {
        first:{version:"26.0.1384.2", date:"2013年1月15日。"},
        normal:{version:"26.0.1410.43", date:"2013年3月26日。"},
        last:{version:"26.0.1410.64", date:"2013年4月9日。"}
    },
    {
        first:{version:"27.0.1423.0", date:"2013年2月26日。"},
        normal:{version:"27.0.1453.12", date:"2013年4月2日。"},
        last:{version:"27.0.1453.116", date:"2013年6月18日。"}
    },
    {
        first:{version:"28.0.1464.0", date:"2013年4月5日。"},
        normal:{version:"28.0.1500.71", date:"2013年7月9日。"},
        last:{version:"28.0.1500.95", date:"2013年7月30日。"}
   },
   {
        first:{version:"29.0.1516.3", date:"2013年5月24日。"},
        normal:{version:"29.0.1547.57", date:"2013年8月20日。"},
        last:{version:"29.0.1547.76", date:"2013年9月18日。"}
   },
  {
        first:{version:"30.0.1566.2", date:"2013年7月16日。"},
        normal:{version:"30.0.1599.66", date:"2013年10月01日。"},
        last:{version:"30.0.1599.114", date:"2013年10月22日。"}
   },
   {
        first:{version:"31.0.1612.0", date:"2013年8月27日。"},
        normal:{version:"31.0.1650.48", date:"2013年11月12日。"},
        last:{version:"31.0.1650.63", date:"2013年12月04日。"}
   },
   {
        first:{version:"32.0.1659.2", date:"2013年11月03日。"},
        normal:{version:"", date:""},
        last:{version:"", date:""}
   },
   {
        first:{version:"33.0.1707.0", date:"2013年11月12日。"},
        normal:{version:"", date:""},
        last:{version:"", date:""}
    }
];
var suggestion = [
    // 大版本号大于最新版
    "此版本极速内核尚未发布正式版,您可以作为尝鲜时使用。",
    // 大版本号为最新版,子版本号大于等于对应的版本号
    "此版本内核为已发布正式版的最新版极速内核,建议您继续使用。",
    // 大版本号为最新版,子版本号小于对应的版本号
    "此版本极速内核为非正式版,建议您选择使用最新正式版内核的浏览器。",
    // 大版本号为最新版-1,子版本号大于等于对应的版本号
    "此版本极速内核为较新的正式版。建议您继续使用,等待浏览器升级内核。",
    // 大版本号为最新版-1,子版本号小于对应的版本号
    "此版本极速内核为非正式版。建议您选择使用最新正式版内核的浏览器。",
    // 大版本号大于等于8、小于最新版-1,子版本号大于对应的版本号
    "此版本极速内核较旧。建议您选择使用最新正式版内核的浏览器。",
    // 大版本号大于等于8、小于最新版-1,子版本号小于对应的版本号
    "此版本极速内核为较旧的非正式版。建议您选择使用最新正式版内核的浏览器。",
    // 大版本号大于等于5、小于8,子版本号大于对应的版本号
    "此版本极速内核非常陈旧,面临安全风险。建议您立即更换为使用最新正式版内核的浏览器。",
    //大版本号大于等于5、小于8,子版本号小于对应的版本号
    "此版本极速内核为非常陈旧的非正式版,面临安全风险。建议立即更换为使用最新正式版内核的浏览器。",
    // 大版本号小于最低版本号
    "此版本极速内核非常陈旧,面临安全风险。建议您立即更换为使用最新正式版内核的浏览器。"
];
/*
 **********************************************************************************************/

/*
 * 函数功能:      判断两个版本号的大小
 * 函数参数:      两个版本号的字符串
 * 函数返回值:    1 表示第一个版本号大于第二个
 *                 0 表示两个版本号相同
 *                -1 表示第一个版本号小于第二个
 */
function cmpVersion(szV1, szV2) {
    var arrV1 = szV1.split(".");
    var arrV2 = szV2.split(".");

for (var i = 0; i < arrV1.length && i < arrV2.length; i++) {
        if (parseInt(arrV1[i]) > parseInt(arrV2[i]))
            return (1);
        else if (parseInt(arrV1[i]) < parseInt(arrV2[i]))
            return (-1);
    }
    if (arrV1.length == arrV2.length) {
        return (0);
    } else if (arrV1.length > arrV2.length) {
        return (1);
    } else {
        if (arrV1.length == 2 && arrV1[1] == 0) {
            return (1);
        } else {
            return (-1);
        }
    }
}

/*
 * 函数功能: 获取chromium版本号的类型
 * 函数参数: 版本号的字符串
 * 函数返回值:非正式,空
 */
function chromiumVersionType(version) {
    var versionType = [
        "",               // 大版本号已知,子版本号大于等于对应的版本号
        "(非正式版)"    // 大版本号已知,子版本号小于对应的版本号(正式版)/大版本号大于最新版
    ];

var suggest = "";
    var arrV1 = version.split(".");
    if (parseInt(arrV1[0]) < parseInt(vi[0].normal.version.split(".")[0])) {
        suggest = versionType[0];
    } else if (parseInt(arrV1[0]) > parseInt(vi[vi.length - 1].normal.version.split(".")[0])) {
        suggest = versionType[1];
    }

for (var i = 0; i < vi.length; i++) {
        if (vi[i].normal.version == "") {
            suggest = versionType[1];
            break;
        }
        var arrV2 = vi[i].normal.version.split(".");
        if (parseInt(arrV1[0]) == parseInt(arrV2[0])) {
            if (vi[i].normal.version!="" && cmpVersion(version, vi[i].normal.version) != -1) {
                suggest = versionType[0];
            } else {
                suggest = versionType[1];
            }
            break;
        }
    }

return suggest;
}

// 获取chromium内核版本号的发布时间
function chromiumVersionDate(version) {
    var bv = parseInt(version.split(".")[0]);
    // 大版本号大于最大版本号
    if (bv > vi.length + 4) {
        if (vi[vi.length - 1].last.version && cmpVersion(version, vi[vi.length - 1].last.version) > 0) {
            return ("此版本 Chromium 内核发布于 " + vi[vi.length - 1].last.date.replace("。", " 之后。"));
        } else if (vi[vi.length - 1].normal.version && cmpVersion(version, vi[vi.length - 1].normal.version) > 0) {
            return ("此版本 Chromium 内核发布于 " + vi[vi.length - 1].normal.date.replace("。", " 之后。"));
        } else {
            return ("此版本 Chromium 内核发布于 " + vi[vi.length - 1].first.date.replace("。", " 之后。"));
        }
    }

var firstVersion = vi[bv - 5].first.version;
    var normalVersion = vi[bv - 5].normal.version;
    var lastVersion = vi[bv - 5].last.version;

var lowerVersion = vi[0].first.version;
    var upperVersion = vi[vi.length - 1].last.version;

if (cmpVersion(version, lowerVersion) == -1) {
        return ("此版本 Chromium 内核发布早于 " + vi[0].first.date);

} else if (cmpVersion(version, lowerVersion) == 0) {
        return ("此版本 Chromium 内核发布于 " + vi[0].first.date);

} else if (upperVersion != "" && cmpVersion(version, upperVersion) == 1) {
        return "";

} else if (cmpVersion(version, firstVersion) == -1) {
        return ("此版本 Chromium 内核发布早于 " + vi[bv - 5].first.date);

} else if (cmpVersion(version, firstVersion) == 0) {
        return ("此版本 Chromium 内核发布于 " + vi[bv - 5].first.date);

} else if (cmpVersion(version, firstVersion) == 1 &&
        cmpVersion(version, normalVersion) == -1) {
        if (vi[bv - 5].first.date == vi[bv - 5].normal.date) {
            return ("此版本 Chromium 内核发布于 " + vi[bv - 5].normal.date);
        } else {
            return ("此版本 Chromium 内核发布于 " + vi[bv - 5].first.date.replace("。", "") + "-" + vi[bv - 5].normal.date.replace("。", " 之间。"));
        }
    } else if (cmpVersion(version, firstVersion) == 1 && normalVersion == ""){
        return ("此版本 Chromium 内核发布于 " + vi[bv - 5].first.date.replace("。", "之后。"));

} else if (cmpVersion(version, normalVersion) == 0) {
        return ("此版本 Chromium 内核发布于 " + vi[bv - 5].normal.date);

} else if (cmpVersion(version, normalVersion) == 1 &&
        cmpVersion(version, lastVersion) == -1) {
        if (vi[bv - 5].normal.date == vi[bv - 5].last.date) {
            return ("此版本 Chromium 内核发布于 " + vi[bv - 5].normal.date);
        } else {
            return ("此版本 Chromium 内核发布于 " + vi[bv - 5].normal.date.replace("。", "") + "-" + vi[bv - 5].last.date.replace("。", " 之间。"));
        }
    } else if (cmpVersion(version, normalVersion) == 1 && lastVersion=="") {
        return ("此版本 Chromium 内核发布于 " + vi[bv - 5].normal.date.replace("。", "之后。"));

} else if (cmpVersion(version, lastVersion) == 0) {
        return ("此版本 Chromium 内核发布于 " + vi[bv - 5].last.date);

} else if (cmpVersion(version, lastVersion) == 1) {
        return ("此版本 Chromium 内核发布于 " + vi[bv - 5].last.date.replace("。", " 之后。"));
    }
}

// 获取chromium版本的建议
function chromiumVersionSuggestion(version) {
    var arrV1 = version.split(".");
    var latestIndex = 12;
    for (var i=vi.length-1; i>=0; i--) {
        if (vi[i].normal.version != "") {
            latestIndex = i;
            break;
        }
    }

if (parseInt(arrV1[0]) > parseInt(vi[latestIndex].normal.version.split(".")[0])) {
        return (suggestion[0]);
    } else if (cmpVersion(version, vi[latestIndex].normal.version) != -1) {
        return (suggestion[1]);
    } else if (parseInt(arrV1[0]) == parseInt(vi[latestIndex].normal.version.split(".")[0]) &&
        cmpVersion(version, vi[latestIndex].normal.version) == -1) {
        return (suggestion[2]);
    } else if (parseInt(arrV1[0]) == parseInt(vi[latestIndex-1].normal.version.split(".")[0]) &&
        cmpVersion(version, vi[latestIndex-1].normal.version) != -1) {
        return (suggestion[3]);
    } else if (parseInt(arrV1[0]) == parseInt(vi[latestIndex-1].normal.version.split(".")[0]) &&
        cmpVersion(version, vi[latestIndex-1].normal.version) == -1) {
        return (suggestion[4]);
    } else if (parseInt(arrV1[0]) < parseInt(vi[latestIndex-1].normal.version.split(".")[0]) &&
        parseInt(arrV1[0]) >= 8 &&
        cmpVersion(version, vi[parseInt(arrV1[0]) - 5].normal.version) != -1) {
        return (suggestion[5]);
    } else if (parseInt(arrV1[0]) < parseInt(vi[latestIndex-1].normal.version.split(".")[0]) &&
        parseInt(arrV1[0]) >= 8 &&
        cmpVersion(version, vi[parseInt(arrV1[0]) - 5].normal.version) == -1) {
        return (suggestion[6]);
    } else if (parseInt(arrV1[0]) < 8 &&
        parseInt(arrV1[0]) >= 5 &&
        cmpVersion(version, vi[parseInt(arrV1[0]) - 5].normal.version) != -1) {
        return (suggestion[7]);
    } else if (parseInt(arrV1[0]) < 8 &&
        parseInt(arrV1[0]) >= 5 &&
        cmpVersion(version, vi[parseInt(arrV1[0]) - 5].normal.version) == -1) {
        return (suggestion[8]);
    } else if (parseInt(arrV1[0]) < 5) {
        return (suggestion[9]);
    }
}

// 判断是否为chrome内核浏览器
function isChromium(userAgent) {
    var chromium = "mozilla/&&applewebkit/&&chrome/&&safari/".split("&&");
    for (var i = 0; i < chromium.length; i++)
        if (userAgent.indexOf(chromium[i]) < 0)
            return false;
    return true;
}

// 判断是否为webkit内核浏览器
function isWebkit(userAgent) {
    if (userAgent.indexOf("applewebkit/") < 0)
        return false;
    return true;
}

// 检测到chrome内核浏览器时显示
function chromiumDisplay(userAgent) {
    var version = userAgent.match(/chrome\/([\d.]+)/)[1];

var versionType = chromiumVersionType(version);
    var versionsObj = document.getElementById("version");
    var suggestionObj = document.getElementById("suggestion");
    var versionDate = chromiumVersionDate(version);
    var suggestion = chromiumVersionSuggestion(version);
    var versionNum = version.split(".")[0];

versionsObj.innerHTML = "版本号:<strong>" + version + "<\/strong>" + versionType;
    if (versionNum >= 8 && versionType == "") {
        suggestionObj.innerHTML = versionDate + "<br \/>" + suggestion;
    } else {
        suggestionObj.innerHTML = versionDate + "<br \/><span style='color:#900101;'>" + suggestion + "<\/span>";
        var versionDiv = document.getElementById("in");
        versionDiv.style.background = "#C49259";
        versionDiv.style.borderColor = "#C49259";
        document.getElementById("version").style.borderBottomColor = "#9b6A33";
        document.getElementById("tb").style.borderTopColor = "#D7B287";
    }
}

// 检测到webkit内核浏览器时显示
function webkitDisplay(userAgent) {
    var version = userAgent.match(/applewebkit\/([\d.]+)/)[1];
    var versionsObj = document.getElementById("version");
    versionsObj.innerHTML = "版本号:<strong>" + version + "<\/strong>";
    webkitVersionUrl = webkitVersionUrl.replace("%s", version);
    var suggestion = "您的浏览器使用了Webkit内核。<a href='" + webkitVersionUrl + "'>点此查看<\/a>内核发布时间";
    var suggestionObj = document.getElementById("suggestion");
    suggestionObj.innerHTML = suggestion;
}

// 未检测到极速内核版本号时显示
function othersDisplay(userAgent) {
    var versionsObj = document.getElementById("version");
    versionsObj.innerHTML = "未能检测到极速内核版本号";
    var suggestionObj = document.getElementById("suggestion");
    suggestionObj.innerHTML = "请使用双核浏览器的极速模式或其他Chromium、Webkit内核浏览器进行检测。";
}

// 判断浏览器类型
function whatBrowser() {
    var userAgent = navigator.userAgent.toLowerCase();
    if (isChromium(userAgent)) {
        chromiumDisplay(userAgent);
    } else if (isWebkit(userAgent)) {
        webkitDisplay(userAgent);
    } else {
        othersDisplay(userAgent);
    }
}

浏览器内核及版本检测相关推荐

  1. WindwosAndroid浏览器内核版本检测

    工具网址:https://ie.icoa.cn/ 使用浏览器访问这个地址,就可以查看当前浏览器内核信息. 包含内核的类型,内核的版本,以及主机操作系统的类型和版本. 可以查看PC端浏览器以及Andro ...

  2. 浏览器内核Trident/Gecko/WebKit/Presto

    "浏览器内核"主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采 ...

  3. java二次开发浏览器内核_常见的五大浏览器的内核

    首先我们理解一下什么是内核: 英文叫做:Rendering Engine,中文翻译很多,排版引擎.解释引擎.渲染引擎,现在流行称为浏览器内核. Rendering Engine,顾名思义,就是用来渲染 ...

  4. 介绍一下你对浏览器内核的理解?

    主要分成两部分:渲染引擎(layout engineer 或 Rendering Engine)和 JS 引 擎. 渲染引擎:负责取得网页的内容(HTML.XML.图像等等).整理讯息(例如加入 CS ...

  5. 360:中国为什么没有自主研发的浏览器内核?

    来源:360公司 物联网智库 整理发布 摘要:近日360公司发表题为<中国为什么没有自主研发的浏览器内核?>的文章,文章中写道:从0到1,从无到有,这是很多人理解的自主研发,按这个标准,国 ...

  6. 新版 Edge 浏览器或将拥有两个不同的浏览器内核

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   微软即将发布的新版 Edge 浏览器很可能同时包含 ChromiumBlink 和 MSHTML(又称 Trident)两个浏览器内核,方便 ...

  7. Android 项目集成腾讯X5浏览器内核

    1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...

  8. 浏览器内核_测量时间:从Java到内核再到

    浏览器内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步向栈底移动:通过OpenJDK源代码g ...

  9. 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史)

    内核 首先得搞懂浏览器内核究竟指的是什么. 浏览器内核又可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎.它负责取得网页的内容(HTML ...

最新文章

  1. WPF入门教程系列九——布局之DockPanel与ViewBox(四)
  2. C语言函数strstr 分析及实现
  3. 用 python print() 函数实现的三个特效
  4. numpy.random随机数模块常用函数总结
  5. Nginx学习总结(11)——提高Nginx服务器的安全性,稳定性和性能的12种技巧
  6. 在远程桌面服务中配置RD网关直接访问内网
  7. lcd1602c语言程序分析,LCD1602 C程序
  8. javascript-cropper插件翻译笔记
  9. 对话微软大中华区CEO梁念坚:WP7为云而生
  10. kubernetes-准入控制器-13
  11. 如何设置快递送达时短信提醒
  12. 一周AI看点 | 北航设立全国首个人工智能专业,前IBM沃森首席科学家任京东副总裁
  13. asp 遇到过的问题集锦,附加asp语句添加数据库和生成表,asp命令更改指定文件的文件名,asp值传递的应用091116小结...
  14. 2022最常用且好用的IDEA插件
  15. Java+MySQL基于Springboot口腔牙科诊所管理系统#毕业设计
  16. 孙正义的12条成功之道
  17. AWVS扫描器的用法
  18. delta函数的简化
  19. 可以媲美TortoiseSVN的LINUX版SVN客户端软件RabbitVCS
  20. 3ds max必用动画插件/RayFire 3D爆炸碎裂效果制作插件

热门文章

  1. 分享 10 点大学自学编程的重要经验!
  2. 联科教育SQL Server 2008 R2管理系列04:创建表
  3. OffsetRect的用法
  4. 告别传统excel,教你高效制作各种报表
  5. (一)、通信技术的基本概念
  6. 校园招聘攻略----硬件工程师基础问题(一)
  7. 22 致远OA部署可能遇到的问题
  8. Android:Drawable的缓存机制
  9. Android常见Drawable使用
  10. Node.js文件系统fs扩展fs-extra