2009-11-13 3 views

Répondre

3

Pour « JavaScript » officiel, qui est la mise en œuvre de Mozilla de ECMA-262, vous pouvez utiliser l'attribut type pour détecter la version:

<script type="text/javascript;version=1.5"> v= '1.5'; </script> 
<script type="text/javascript;version=1.6"> v= '1.6'; </script> 
<script type="text/javascript;version=1.7"> v= '1.7'; </script> 
    ... 

Cela fonctionne aussi dans Opera, (les versions récentes prétendent supporter JavaScript 1.5). IE et Webkit n'exécuteront aucun script avec un paramètre de version dans son type.

Ceci est similaire à l'ancienne école language attribut:

<script language="javascript1.5"> v= '1.5'; </script> 
    ... 

Ceci est généralement considéré comme obsolète, mais il ne fonctionne pas dans d'autres navigateurs. Les navigateurs Webkit récents prétendent prendre en charge 1.7 et tous les IE prétendent prendre en charge uniquement 1.3.

IE a its own versioning scheme pour JScript, que vous pouvez renifler pour des commentaires conditionnels par:

<script type="text/javascript"> 
    /*@cc_on @if (@_jscript_version>=5.5) 
     v= '5.5'; 
    @end @*/ 
</script> 

D'autres navigateurs, vous ne pouvez pas le savoir. Comme pour la version ECMA-262, tous les navigateurs modernes supportent la ligne de base de la troisième édition (ouais, OK, il y a de petites différences et des bogues purs et simples, surtout dans IE, mais quand même). Aucun navigateur ne prend en charge de grandes quantités de la cinquième édition pour le moment, mais cela viendra. (Il n'y avait pas de quatrième édition.)

Rien de tout cela n'est très utile. Comme vous pouvez le voir, les numéros de version sont assez laineux et ne reflètent pas vraiment ce que le navigateur supporte terriblement bien. Vous êtes généralement mieux de faire des reniflages de capacités. Par exemple si vous voulez les fonctionnalités JSON de ECMA-262-5, voyez si window.JSON existe. Si vous voulez une liaison de fonction, voyez si .bind existe sur votre fonction. Vous pouvez souvent détecter le manque de ces fonctionnalités et corriger un repli natif JavaScript pour quand ils ne sont pas disponibles.

Les fonctionnalités syntaxiques de JavaScript, cependant, ne peuvent être repérées.Inclure simplement quelque chose comme une définition de getter/setter dans un bloc de code JavaScript donnera immédiatement une erreur de syntaxe dans IE avant que vous puissiez renifler leur disponibilité. Mais ce n'est généralement pas un trop gros problème car en pratique, vous ne pouvez pas utiliser ces nouvelles fonctionnalités de toute façon.

0

Vous pouvez spécifier quelle version de Javascript doit évaluer un bloc de code comme ceci:

<script language="javascript1.5"> 
//this code gets run 
</script> 

Plus d'info here.

+0

Cette documentation est * ancienne * –

+0

Oui, j'ai remarqué, mais j'avais encore la réponse à ce que je cherchais :-) –

3

Ce n'est généralement pas la peine d'essayer.

Si vous souhaitez utiliser une fonctionnalité spécifique, recherchez si cette fonctionnalité est prise en charge à la place.

Même alors, il n'y a aucune garantie que la fonctionnalité est implémentée correctement! ;-)

Cas d'exemple ... IE prend en charge document.getElementById(id); Cependant, sauf si vous utilisez IE8 en mode IE8 Standards, il peut renvoyer l'un des nombreux mauvais résultats.

+0

+1 Merci pour la perspicacité. –

1

Une autre façon de le faire, vous pouvez mettre à l'intérieur essayer de bloquer sa syntaxe. par exemple:

try{ 
    "use strict"; 
    let x=1;//if it's works, then you have some supprot 
    console.info("Good news, ecma6 works "); 
}catch(e){ 
    console.warn("Sorry, but ecma6 still doesn't supported"); 
} 
Questions connexes