使用 modernizr 检测 Internet Explorer 版本
detect internet explorer version using modernizr
我是 modernizr 的新手,但据我了解其基本用途,它可以检测浏览器的功能。在这个 SO Post: Request.Browser.Browser in chrome returning "IE" 第一个答案暗示这可以在代码后面完成。
string s = "Browser Capabilities\n"
+ "Type = " + browser.Type + "\n"
+ "Name = " + browser.Browser + "\n"
+ "Version = " + browser.Version + "\n"
+ "Major Version = " + browser.MajorVersion + "\n"
+ "Minor Version = " + browser.MinorVersion + "\n"
+ "Platform = " + browser.Platform + "\n"
+ "Is Beta = " + browser.Beta + "\n"
+ "Is Crawler = " + browser.Crawler + "\n"
+ "Is AOL = " + browser.AOL + "\n"
+ "Is Win16 = " + browser.Win16 + "\n"
+ "Is Win32 = " + browser.Win32 + "\n"
+ "Supports Frames = " + browser.Frames + "\n"
+ "Supports Tables = " + browser.Tables + "\n"
+ "Supports Cookies = " + browser.Cookies + "\n"
+ "Supports VBScript = " + browser.VBScript + "\n"
+ "Supports JavaScript = " +
browser.EcmaScriptVersion.ToString() + "\n"
+ "Supports Java Applets = " + browser.JavaApplets + "\n"
+ "Supports ActiveX Controls = " + browser.ActiveXControls
+ "\n"
+ "Supports JavaScript Version = " +
browser["JavaScriptVersion"] + "\n";
这是否也可以在 Modernizr 中本地完成,或者是否有类似的功能可以完成预期的任务?
更新:澄清一下,这样做的目的是为了能够检测到 Internet Explorer 的某些版本号,让用户知道他们正在使用不受支持的浏览器版本,这样他们就不会达到失败是一个问题的点。
由于某些时间限制,我不得不使用其他方法来解决此问题。我们决定进行 Javascript 检查,看看问题出在哪里。我将发布我的成功结果,以防将来有人需要解决类似问题。
ar version = detectIE();
if (version === false) {
document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
document.getElementById('result').innerHTML = 'IE ' + version;
if (version == 11) {
('#browserNotSupported').modal('show')
alert('This is still firing')
}
console.log(version)
}
// add details to debug result
//document.getElementById('details').innerHTML = window.navigator.userAgent;
/**
* detect IE
* returns version of IE or false, if browser is not Internet Explorer
*/
function detectIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
var edge = ua.indexOf('Edge/');
if (edge > 0) {
// Edge (IE 12+) => return version number
return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
return false;
}
UserAgent 嗅探很糟糕,因为 IE 可以在请求 header 中发送任何旧 UAS,具体取决于请求 header、页面元或企业站点模式列表中的 x-ua 设置。这是一个基于特征检测来检测IE仿真模式的客户端成语。
function getIEVersion(odoc){
if (odoc.body.style.scrollbar3dLightColor!=undefined)
{
if (!!win.WebGLRenderingContext) {return 'IE11';}
else if (odoc.body.style.msGridRows!=undefined) {return 'IE10';}
else if (odoc.body.style.opacity!=undefined) {return 'IE9';}
else if (odoc.body.style.msBlockProgression!=undefined) {return 'IE8';}
else if (odoc.body.style.msInterpolationMode!=undefined) {return 'IE7';}
else if (odoc.body.style.textOverflow!=undefined) {return 'IE6'}
else {return 'IE5.5 or lower';}
}
}
用法:var EmulationVersion = getIEVersion(document);
使用开发工具的Emulation选项卡更改IE11或更低版本的仿真模式进行测试。在仿真选项卡上,您还可以自定义请求 UserAgent 字符串以测试任何服务器端浏览器上限假设。
通用功能测试是 if('addEventListener' in window)//,它表示客户端浏览器至少使用 IE9 仿真或者是 'modern' 浏览器。官方 MS 仅支持 IE11(可以采用低版本 IE 的任何仿真模式)。有关浏览器版本支持的功能的完整列表,请参阅 caniuse.com。请记住,在 IE 中,您正在测试它假设的浏览器仿真模式(由 x-ua header/meta 或企业站点模式列表设置)中的功能支持,而不是其在导航器中的版本号 object或“关于”菜单中的版本号或更新版本 KB 号。
我是 modernizr 的新手,但据我了解其基本用途,它可以检测浏览器的功能。在这个 SO Post: Request.Browser.Browser in chrome returning "IE" 第一个答案暗示这可以在代码后面完成。
string s = "Browser Capabilities\n"
+ "Type = " + browser.Type + "\n"
+ "Name = " + browser.Browser + "\n"
+ "Version = " + browser.Version + "\n"
+ "Major Version = " + browser.MajorVersion + "\n"
+ "Minor Version = " + browser.MinorVersion + "\n"
+ "Platform = " + browser.Platform + "\n"
+ "Is Beta = " + browser.Beta + "\n"
+ "Is Crawler = " + browser.Crawler + "\n"
+ "Is AOL = " + browser.AOL + "\n"
+ "Is Win16 = " + browser.Win16 + "\n"
+ "Is Win32 = " + browser.Win32 + "\n"
+ "Supports Frames = " + browser.Frames + "\n"
+ "Supports Tables = " + browser.Tables + "\n"
+ "Supports Cookies = " + browser.Cookies + "\n"
+ "Supports VBScript = " + browser.VBScript + "\n"
+ "Supports JavaScript = " +
browser.EcmaScriptVersion.ToString() + "\n"
+ "Supports Java Applets = " + browser.JavaApplets + "\n"
+ "Supports ActiveX Controls = " + browser.ActiveXControls
+ "\n"
+ "Supports JavaScript Version = " +
browser["JavaScriptVersion"] + "\n";
这是否也可以在 Modernizr 中本地完成,或者是否有类似的功能可以完成预期的任务?
更新:澄清一下,这样做的目的是为了能够检测到 Internet Explorer 的某些版本号,让用户知道他们正在使用不受支持的浏览器版本,这样他们就不会达到失败是一个问题的点。
由于某些时间限制,我不得不使用其他方法来解决此问题。我们决定进行 Javascript 检查,看看问题出在哪里。我将发布我的成功结果,以防将来有人需要解决类似问题。
ar version = detectIE();
if (version === false) {
document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
document.getElementById('result').innerHTML = 'IE ' + version;
if (version == 11) {
('#browserNotSupported').modal('show')
alert('This is still firing')
}
console.log(version)
}
// add details to debug result
//document.getElementById('details').innerHTML = window.navigator.userAgent;
/**
* detect IE
* returns version of IE or false, if browser is not Internet Explorer
*/
function detectIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
var edge = ua.indexOf('Edge/');
if (edge > 0) {
// Edge (IE 12+) => return version number
return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
return false;
}
UserAgent 嗅探很糟糕,因为 IE 可以在请求 header 中发送任何旧 UAS,具体取决于请求 header、页面元或企业站点模式列表中的 x-ua 设置。这是一个基于特征检测来检测IE仿真模式的客户端成语。
function getIEVersion(odoc){
if (odoc.body.style.scrollbar3dLightColor!=undefined)
{
if (!!win.WebGLRenderingContext) {return 'IE11';}
else if (odoc.body.style.msGridRows!=undefined) {return 'IE10';}
else if (odoc.body.style.opacity!=undefined) {return 'IE9';}
else if (odoc.body.style.msBlockProgression!=undefined) {return 'IE8';}
else if (odoc.body.style.msInterpolationMode!=undefined) {return 'IE7';}
else if (odoc.body.style.textOverflow!=undefined) {return 'IE6'}
else {return 'IE5.5 or lower';}
}
}
用法:var EmulationVersion = getIEVersion(document);
使用开发工具的Emulation选项卡更改IE11或更低版本的仿真模式进行测试。在仿真选项卡上,您还可以自定义请求 UserAgent 字符串以测试任何服务器端浏览器上限假设。
通用功能测试是 if('addEventListener' in window)//,它表示客户端浏览器至少使用 IE9 仿真或者是 'modern' 浏览器。官方 MS 仅支持 IE11(可以采用低版本 IE 的任何仿真模式)。有关浏览器版本支持的功能的完整列表,请参阅 caniuse.com。请记住,在 IE 中,您正在测试它假设的浏览器仿真模式(由 x-ua header/meta 或企业站点模式列表设置)中的功能支持,而不是其在导航器中的版本号 object或“关于”菜单中的版本号或更新版本 KB 号。