2013-05-03 2 views
12

Поскольку многие уже размещены в других вопросах (также в документации jQuery), старый jQuery.browser.version устарел и работает только в jquery1.3.Как определить IE10 с помощью javascript?

Вы знаете, еще один простой способ определить это, что я могу включить в свой код перед:

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-хаки. Есть ли способ обнаружить его так же просто, как я мог это сделать раньше?

if (jQuery.browser.version != 10) {... 
+0

Возможный дубликат [Как настроить только Internet Explorer 10 для определенных ситуаций, таких как CSS или JavaScript-код, специфичный для Internet Explorer?] (Http://stackoverflow.com/questions/9900311/how- do-i-target-only-internet-explorer-10-for-sure-situation-like-internet-e) – lifetimes

+1

@ Zenith, возможно, вы должны прочитать весь вопрос: прежде чем вы скажете, что это дублированный вопрос об этом или о том, я хотел бы укрепить, что я не хочу использовать css-хаки. Есть ли способ обнаружить его так же просто, как я мог это сделать раньше? – periback2

+0

Я прочитал его. Вы должны прочитать ответы на этот вопрос. Есть много ответов, которые могут вас заинтересовать, некоторые хаки, некоторые другие альтернативы. – lifetimes

ответ

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

Я согласен с вами .. и это, вероятно, причина, по которой jQuery рекомендует использовать $ .support вместо устаревшего $ .browser.version – periback2

+0

. Я собирался использовать ваш ответ, но я проверил свой код, и я нашел функцию немного проще, чем ваша, что уже было написанный здесь, и работал хорошо, но, поскольку это тот же подход, который вы использовали, я также собираюсь принять ваш ответ. Большое вам спасибо. Другие ребята хотели знать конкретно проблему, но ее действительно трудно идентифицировать, потому что это это приложение, написанное первоначально 10 лет назад, и в то время оно было проверено только для IE ... теперь много проблем исправлено для работы в кросс-браузинге (и несколько хаков были написаны много лет назад для IE) ... поэтому у вас есть идея. – periback2

+3

ну, у нас такая же ситуация :) Приложение, написанное 10 лет назад, предназначалось для поддержки только IE, и в качестве части текущего проекта мы должны были добавить поддержку кросс-браузера, современный стиль, MVC и т. Д. Я прекрасно понимаю вашу ситуацию :) – J0HN

0

The IE10 User-Agent String говорит

Однако, если ваш сайт по-прежнему с помощью агента пользователя нюхают, затем увеличивая «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.]+)/ 
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 начнется с 10 в IE 10.

Условные комментарии не поддерживаются в IE 10, а строка User-Agent может быть подделана.

С минификация обычно удаляет комментарии, вы можете использовать eval или Function выяснить аналогичным образом:

var isIE10 = false; 
if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) { 
    isIE10 = true; 
} 

DEMO:http://jsfiddle.net/wauGa/2/


UPDATE:

К sti будете избегать минификация комментариев, но и совместить обнаружение любой версии, вы можете использовать что-то вроде:

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).

+3

[Этот ответ] (http://stackoverflow.com/a/15657729/778118) предлагает вам обходной путь, если вы уменьшаете свой скрипт ... – jahroy

+0

@jahroy Хорошая точка, спасибо, что указали это. Я помню, как несколько раз отвечал на этот вопрос («Как настроить IE 10?»), И я клянусь, что мой ответ включен с использованием функции «Function()», которая похожа на «eval». Я просто не могу найти ответ ... – Ian

+0

@ Если вы также можете сделать это с IE-условными комментариями, обернутыми вокруг тегов скриптов. – Pointy

0

Вот одна линия решение для обнаружения IE 10

var IE10 = navigator.userAgent.toString().toLowerCase().indexOf("trident/6")>-1; 

и для получения дополнительной информации о другой версии и браузеров смотрите этот Link of Browser Detection

0

Я нашел себя, имеющий выпуск (радиус границы на фрейме с легенда) с IE с 9 по 11 (не проверял IE 12)
MSIE не является длинным агентом пользователя в IE 11, а 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'; 
}  
Смежные вопросы