2015-08-29 7 views
2

Comment vérifier si les fonctions getAttributeNode, setAttributeNode et createAttribute sont supportées par le navigateur?JavaScript - Teste si getAttributeNode, setAttributeNode et createAttribute sont supportés par le navigateur

Je dois détecter par JavaScript la limite entre IE6 et IE5.5 sans l'agent d'utilisateur Navigator (via IEtester ou l'émulateur de la console IE).

Pourquoi? Vérification du support du navigateur Modernizr

Merci!


Merci Oriol! Mais étant plus spécifique, j'ai besoin de quelque chose comme ceci:

var support = true; 
if(typeof(document.getElementsByClassName) === 'undefined'){ 
    support = false; 
    } 

if(support){ 
    // IE > 8 
    }else{ 
    // IE <= 8 
     } 

Mais au lieu de IE 8, IE 5.5. En utilisant getAttributeNode, setAttributeNode et createAttribute au lieu de document.getElementsByClassName


!!! Je l'ai trouvé en utilisant la réponse Oriol et la méthode de détection vidéo de http://diveintohtml5.info/detect.html

function supports() { 
    var Element = document.createElement('div'), 
    Q1 = !!Element.getAttributeNode, 
    Q2 = !!Element.setAttributeNode, 
    Q3 = !!document.createAttribute; 
    return Q1 && Q2 && Q3; 
} 

if(supports()){ 
    // IE > 5.5 
    }else{ 
    // IE <= 5.5 
     } 
+0

Vous pouvez simplement utiliser 'if (myElement.getAttributeNode && myElement.setAttributeNode && myElement.createAttribute) {faire quelque chose}' – Saar

Répondre

2

Vous pouvez utiliser l'opérateur in pour vérifier si un objet a une propriété:

'getAttributeNode' in myElement 
&& 'setAttributeNode' in myElement 
&& 'createAttribute' in document 

myElement devrait être une référence à un élément, par exemple document.documentElement.

La bonne façon serait de vérifier Element.prototype et Document.prototype, mais l'ancien IE ne les expose pas. Par conséquent, vous devriez vérifier dans certains cas, et supposer que cela fonctionnera aussi pour les autres.

Notez que le code ci-dessus teste uniquement l'existence de la propriété. Si vous voulez être plus en sécurité, vous pouvez également utiliser typeof pour vérifier si elles sont des fonctions.

+0

Et sans élément DOM? Comme document.getElementsByClassName? – lucasgabmoreno

+0

@lucasgabmoreno 'getAttributeNode' et' setAttributeNode' ne sont disponibles que dans les instances de 'Element', pas dans celles de' Document'. – Oriol

+0

supports de fonction() {var Element = document.createElement ('div'), Q1 = !! Element.getAttributeNode, Q2 = !! Element.setAttributeNode, Q3 = !! document.createAttribute; retour Q1 Q2 && && Q3; } si (supports()) {// IE> 5.5 } else {// IE <= 5,5 } – lucasgabmoreno