Detectar las funciones del explorador

Actualización: noviembre 2007

Si bien los exploradores son compatibles con casi todas las características de JScript, las nuevas características de .NET Framework, los objetos basados en clases, los tipos de datos, las enumeraciones, las directivas de compilación condicional y la instrucción const sólo se admiten en el servidor. Por tanto, estas características deben utilizarse exclusivamente en las secuencias de comandos del servidor. Para obtener más información, vea Información de versión de JScript.

Una secuencia de comandos de JScript puede detectar las funciones del motor que la interpreta o compila. Esto no es necesario si se escribe código para una aplicación de servidor (que se va a ejecutar en ASP o ASP.NET) o para un programa de la línea de comandos, ya que es fácil descubrir la versión admitida de JScript y escribir el código correspondiente. Sin embargo, cuando se ejecutan secuencias de comandos de cliente en un explorador, esta detección es importante para garantizar que la secuencia de comandos es compatible con el motor de JScript en el explorador.

La compatibilidad con JScript se puede comprobar de dos maneras: utilizando las funciones del motor en tiempo de ejecución o la compilación condicional. Cada uno de estos enfoques tiene sus propias ventajas.

Funciones del motor en tiempo de ejecución

Las funciones del motor en tiempo de ejecución (ScriptEngine, ScriptEngineBuildVersion, ScriptEngineMajorVersion, ScriptEngineMinorVersion) devuelven información sobre su versión actual. Para obtener más información, vea Funciones de JScript.

Para obtener la máxima compatibilidad, sólo se deben utilizar las características de la versión 1 de JScript en una página que comprueba las versiones compatibles de JScript. Si un motor es compatible con una versión de JScript posterior a la versión 1.0, se puede ir a otra página que contenga las características avanzadas. Esto quiere decir que se debe tener distintas versiones de cada página Web que se correspondan con cada una de las versiones de JScript para las que se desea tener compatibilidad. En la mayoría de las situaciones, la mejor solución consiste en tener sólo dos páginas: una diseñada para una versión concreta de JScript y otra diseñada para trabajar sin JScript.

Nota:

El código de JScript que utiliza las características avanzadas debe colocarse en una página independiente que no ejecuten los exploradores con motores incompatibles. Esto es obligatorio porque el motor en tiempo de ejecución de un explorador interpreta todo el código de JScript de una página. El uso de una instrucción if…else para alternar entre un bloque de código que utiliza la versión más reciente de JScript y un bloque de código de la versión 1 de JScript no funciona con motores más antiguos.

En el siguiente ejemplo se muestra el uso de las funciones del motor en tiempo de ejecución. Puesto que estas funciones se introdujeron en la versión 2.0 de JScript, es necesario determinar primero si el motor es compatible con las funciones antes de intentar utilizarlas. Si el motor sólo es compatible con JScript Versión 1.0 o no reconoce JScript, el operador typeof devolverá la cadena "undefined" para cada nombre de función.

if("undefined" == typeof ScriptEngine) {
   // This code is run if the script engine does not support
   // the script engine functions.
   var version = 1;
} else {
   var version = ScriptEngineMajorVersion();
}
// Display the version of the script engine.
alert("Engine supports JScript version " + version);
// Use the version information to choose a page.
if(version >= 5) {
   // Send engines compatible with JScript 5.0 and better to one page.
   var newPage = "webpageV5.htm";
} else {
   // Send engines that do not interpret JScript 5.0 to another page.
   var newPage = "webpagePre5.htm";
}
location.replace(newPage);

Compilación condicional

Las variables e instrucciones de la compilación condicional pueden ocultar código de JScript a los motores no compatibles con la compilación condicional. Este enfoque resulta útil si se desea incluir una pequeña cantidad de código alternativo directamente en la página Web.

Nota:

No utilice comentarios de varias líneas en los bloques de compilación condicional, ya que los motores no compatibles con esta compilación podrían interpretarlos erróneamente.

<script>
/*@cc_on
@if(@_jscript_version >= 5 )
// Can use JScript Version 5 features such as the for...in statement.
// Initialize an object with an object literal.
var obj = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"};
var key;
// Iterate the properties.
for (key in obj) {
   document.write("The "+key+" property has value "+obj[key]+".<BR>");
}
@else 
@*/
alert("Engine cannot interpret JScript Version 5 code.");
//@end
</script>

Si el bloque condicional @if contiene mucho código, puede resultar más fácil utilizar el enfoque anteriormente descrito para usar las funciones del motor en tiempo de ejecución.

Vea también

Conceptos

Información de versión de JScript

Otros recursos

Escribir, compilar y depurar código JScript

Funciones de JScript

Compilación condicional