浏览器内核及版本检测
/* 可配置部分
***************************************************************************************/
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);
}
}
浏览器内核及版本检测相关推荐
- WindwosAndroid浏览器内核版本检测
工具网址:https://ie.icoa.cn/ 使用浏览器访问这个地址,就可以查看当前浏览器内核信息. 包含内核的类型,内核的版本,以及主机操作系统的类型和版本. 可以查看PC端浏览器以及Andro ...
- 浏览器内核Trident/Gecko/WebKit/Presto
"浏览器内核"主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采 ...
- java二次开发浏览器内核_常见的五大浏览器的内核
首先我们理解一下什么是内核: 英文叫做:Rendering Engine,中文翻译很多,排版引擎.解释引擎.渲染引擎,现在流行称为浏览器内核. Rendering Engine,顾名思义,就是用来渲染 ...
- 介绍一下你对浏览器内核的理解?
主要分成两部分:渲染引擎(layout engineer 或 Rendering Engine)和 JS 引 擎. 渲染引擎:负责取得网页的内容(HTML.XML.图像等等).整理讯息(例如加入 CS ...
- 360:中国为什么没有自主研发的浏览器内核?
来源:360公司 物联网智库 整理发布 摘要:近日360公司发表题为<中国为什么没有自主研发的浏览器内核?>的文章,文章中写道:从0到1,从无到有,这是很多人理解的自主研发,按这个标准,国 ...
- 新版 Edge 浏览器或将拥有两个不同的浏览器内核
开发四年只会写业务代码,分布式高并发都不会还做程序员? 微软即将发布的新版 Edge 浏览器很可能同时包含 ChromiumBlink 和 MSHTML(又称 Trident)两个浏览器内核,方便 ...
- Android 项目集成腾讯X5浏览器内核
1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...
- 浏览器内核_测量时间:从Java到内核再到
浏览器内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步向栈底移动:通过OpenJDK源代码g ...
- 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史)
内核 首先得搞懂浏览器内核究竟指的是什么. 浏览器内核又可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎.它负责取得网页的内容(HTML ...
最新文章
- WPF入门教程系列九——布局之DockPanel与ViewBox(四)
- C语言函数strstr 分析及实现
- 用 python print() 函数实现的三个特效
- numpy.random随机数模块常用函数总结
- Nginx学习总结(11)——提高Nginx服务器的安全性,稳定性和性能的12种技巧
- 在远程桌面服务中配置RD网关直接访问内网
- lcd1602c语言程序分析,LCD1602 C程序
- javascript-cropper插件翻译笔记
- 对话微软大中华区CEO梁念坚:WP7为云而生
- kubernetes-准入控制器-13
- 如何设置快递送达时短信提醒
- 一周AI看点 | 北航设立全国首个人工智能专业,前IBM沃森首席科学家任京东副总裁
- asp 遇到过的问题集锦,附加asp语句添加数据库和生成表,asp命令更改指定文件的文件名,asp值传递的应用091116小结...
- 2022最常用且好用的IDEA插件
- Java+MySQL基于Springboot口腔牙科诊所管理系统#毕业设计
- 孙正义的12条成功之道
- AWVS扫描器的用法
- delta函数的简化
- 可以媲美TortoiseSVN的LINUX版SVN客户端软件RabbitVCS
- 3ds max必用动画插件/RayFire 3D爆炸碎裂效果制作插件