it-swarm.com.de

Wie erkenne ich IE10 mit Javascript?

Wie viele bereits in anderen Fragen gepostete (auch in der jQuery-Dokumentation), ist der alte jQuery.browser.version veraltet und funktioniert nur in jquery1.3.

Kennen Sie eine andere einfache Möglichkeit, dies zu erkennen, die ich vorher in meinen Code aufnehmen kann:

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);
}

Bevor du sagst, dass es sich um eine doppelte Frage von this oder this handelt, möchte ich noch einmal betonen, dass ich keine CSS-Hacks verwenden möchte. Gibt es eine Möglichkeit, es so einfach zu erkennen, wie ich es vorher tun konnte?

if (jQuery.browser.version != 10) {...
12
periback2

Im Allgemeinen ist es eine schlechte Idee, nach Browserversionen zu suchen. Es wird als bessere Methode angesehen, nach Browserfunktionen zu suchen. Aber wenn Sie sicher sind, was Sie tun:

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;

Wir haben den folgenden Code in der Produktion, so dass er funktioniert und gut getestet wurde.

Und ja, wir mussten IE10 erkennen, nicht nur eine bestimmte Funktion, die in IE10 vorhanden ist, sondern auch in früheren Versionen.

17
J0HN

Internet Explorer verfügt über die Funktion der bedingten Kompilierung ( http://www.javascriptkit.com/javatutors/conditionalcompile.shtml ). Sie können dies verwenden:

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

DEMO: http://jsfiddle.net/X3Rvz/1/

Sie können dies vor Ihren gesamten JavaScript-Code stellen und von da an nur noch auf isIE10 verweisen.

Die bedingte Kompilierung wird nicht in Nicht-IE ausgeführt, daher ist isIE10 weiterhin false. Und @_jscript_version beginnt nur mit 10 in IE 10.

Bedingte Kommentare werden in IE 10 nicht unterstützt, und die User-Agent-Zeichenfolge kann gefälscht werden.

Da bei der Minimierung normalerweise Kommentare entfernt werden, können Sie mit eval oder Function auf ähnliche Weise herausfinden:

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

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


UPDATE:

Um die Verkleinerung von Kommentaren zu vermeiden, aber auch das Erkennen beliebiger Versionen zu kombinieren, können Sie Folgendes verwenden:

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;
}());

Greifen Sie auf Eigenschaften wie IE.isTheBrowser und IE.actualVersion zu (die aus internen Werten von JScript-Versionen übersetzt werden).

15
Ian

Die jQuery.browser.version funktioniert weiterhin, Sie müssen jedoch das Plugin jquery-migrate einbinden.

http://api.jquery.com/jQuery.browser/https://github.com/jquery/jquery-migrate/#readme

3
Renier Cardoso

Hier ist eine einzeilige Lösung zur Erkennung von IE 10

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

weitere Informationen zu anderen Versionen und Browsern finden Sie unter Link of Browser Detection

0
gulawaiz

Der IE10 User-Agent String sagt

Wenn Ihre Site jedoch noch User-Agent-Sniffing verwendet, ist es besonders bemerkenswert, das „MSIE“ -Token auf „10.0“ zu erhöhen. Warum? Weil es dem Zeichenfolgenwert des Tokens eine zusätzliche Ziffer hinzufügt. Die meisten Sites werden dies mühelos handhaben, aber einige werden die zusätzliche Ziffer falsch verarbeiten, was dazu führt, dass sie IE10 als IE1 identifizieren.

Zur Veranschaulichung hier ein regulärer Ausdruck, der nur die erste Ziffer des Token-Werts "MSIE" erfasst:

// INCORRECT: will report IE10 version in capture 1 as "1"
var matchIE = /MSIE\s(\d)/;

Und hier ist eine, die den vollen Wert des "MSIE" -Token erfasst:

// Correct: will report IE10 version in capture 1 as "10.0"
var matchIE = /MSIE\s([\d.]+)/
0
Mike Samuel

Ich habe ein Problem (Rahmenradius auf Frameset mit Legende) mit IE 9 bis 11 festgestellt (habe IE 12 nicht überprüft)
MSIE ist kein langer Benutzeragent in IE 11 und der App-Name ist Mozilla. Allerdings ist dort ein Dreizack. Ich habe es geschafft, die Dreizack-Version # zu extrahieren und zu erkennen

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';
}