许多已经在其他问题(也在jQuery文档中)中发布过,旧的jQuery.browser.version
已弃用,仅适用于jquery1.3。
您是否知道另一种检测它的简单方法,我可以在之前的代码中包含:
function handleInfoDivPopupVisibility(dynamicEleId, staticEleId){
var parentContainer = $('headerSummaryContainer');
var dynamicEle = $(dynamicEleId);
var staticEle = $(staticEleId);
if(isIE() && parentContainer){
if (jQuery.browser.version != 10) { // I need to find a way to detect if it's IE10 here.
parentContainer.style.overflow = 'visible';
}
}
dynamicEle ? dynamicEle.style.display = '' : '';
if(dynamicEle && staticEle)
gui_positionBelow(dynamicEle, staticEle);
}
在您说出this或this的重复问题之前,我想强调一点,我不想使用css hacks。有没有办法像以前一样简单地检测它?
if (jQuery.browser.version != 10) {...
答案 0 :(得分:17)
一般来说,检查浏览器版本是个坏主意,检查浏览器功能被认为是更好的做法。但如果你确定你在做什么:
function getIEVersion(){
var agent = navigator.userAgent;
var reg = /MSIE\s?(\d+)(?:\.(\d+))?/i;
var matches = agent.match(reg);
if (matches != null) {
return { major: matches[1], minor: matches[2] };
}
return { major: "-1", minor: "-1" };
}
var ie_version = getIEVersion();
var is_ie10 = ie_version.major == 10;
我们在生产中有以下代码,因此它可以正常运行并经过充分测试。
是的,我们确实需要检测IE10,而不仅仅是IE10中存在的特定功能,而不是早期版本中的功能。
答案 1 :(得分:15)
Internet Explorer具有条件编译功能(http://www.javascriptkit.com/javatutors/conditionalcompile.shtml)。你可以用这个:
var isIE10 = false;
/*@cc_on
if (/^10/.test(@_jscript_version)) {
isIE10 = true;
}
@*/
alert(isIE10);
DEMO: http://jsfiddle.net/X3Rvz/1/
您可以在所有JavaScript代码之前添加此代码,然后只需引用isIE10
。
条件编译不会在非IE中运行,因此isIE10
仍然是false
。 @_jscript_version
只会以IE 10中的10
开头。
IE 10中不支持条件注释,并且可以欺骗用户代理字符串。
由于缩小通常会删除评论,因此您可以使用eval
或Function
以类似方式查找:
var isIE10 = false;
if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) {
isIE10 = true;
}
DEMO: http://jsfiddle.net/wauGa/2/
<强>更新强>
为了避免缩小评论但同时结合检测任何版本,您可以使用以下内容:
var IE = (function () {
"use strict";
var ret, isTheBrowser,
actualVersion,
jscriptMap, jscriptVersion;
isTheBrowser = false;
jscriptMap = {
"5.5": "5.5",
"5.6": "6",
"5.7": "7",
"5.8": "8",
"9": "9",
"10": "10"
};
jscriptVersion = new Function("/*@cc_on return @_jscript_version; @*/")();
if (jscriptVersion !== undefined) {
isTheBrowser = true;
actualVersion = jscriptMap[jscriptVersion];
}
ret = {
isTheBrowser: isTheBrowser,
actualVersion: actualVersion
};
return ret;
}());
并访问IE.isTheBrowser
和IE.actualVersion
等属性(从JScript版本的内部值转换而来)。
答案 2 :(得分:3)
jQuery.browser.version仍然有效,但你必须包含jquery-migrate插件。
http://api.jquery.com/jQuery.browser/ https://github.com/jquery/jquery-migrate/#readme
答案 3 :(得分:0)
但是,如果您的网站仍在使用用户代理嗅探,则将“MSIE”令牌增加到“10.0”尤其值得注意。为什么?因为它会在令牌的字符串值中添加一个额外的数字。大多数网站都会毫不费力地处理这个问题,但是有些网站会错误地处理额外的数字,导致他们将IE10识别为IE1。
为了帮助说明,这里是一个正则表达式,它只捕获“MSIE”标记值的第一个数字:
// INCORRECT: will report IE10 version in capture 1 as "1" var matchIE = /MSIE\s(\d)/;
这是一个捕获“MSIE”标记的全部值的文件:
// Correct: will report IE10 version in capture 1 as "10.0" var matchIE = /MSIE\s([\d.]+)/
答案 4 :(得分:0)
这是一个检测IE 10的单行解决方案
var IE10 = navigator.userAgent.toString().toLowerCase().indexOf("trident/6")>-1;
有关其他版本和浏览器的详细信息,请参阅此Link of Browser Detection
答案 5 :(得分:0)
我发现自己有一个问题(带有图例的框架集的边框半径)与IE 9到11(没有检查IE 12)
在IE 11中,MSIE不是长用户代理,appName是Mozilla,但是三叉戟在那里
我设法提取三叉戟版本#并检测它
if(navigator.appVersion.indexOf('Trident/')>-1){// Begin stupid IE crap
var IE=navigator.appVersion;
IE=IE.slice(IE.indexOf('Trident/')+8);
IE=IE.slice(0,IE.indexOf(';'));
IE=Number(IE);
if(IE>=5&&IE<=7) // IE 9 through IE 11
document.body.className='ie';
}