Detectar las funciones del explorador
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 los scripts del servidor. Para obtener más información, vea Información de versión de JScript.
Un script de JScript puede detectar las funciones del motor que lo interpreta o compila. Esto no es necesario si se escribe código para una aplicación del lado servidor (que se va a ejecutar en ASP o ASP.NET) o para un programa de línea de comandos, ya que es fácil detectar la versión admitida de JScript y escribir el código correspondiente. Sin embargo, cuando se ejecutan script de cliente en un explorador, esta detección es importante para garantizar que el script 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 de script o la compilación condicional. Cada uno de estos enfoques tiene sus propias ventajas.
Funciones del motor de script
Las funciones del motor de script (ScriptEngine, ScriptEngineBuildVersion, ScriptEngineMajorVersion, ScriptEngineMinorVersion) devuelven información sobre su versión actual. Para obtener más información, vea Funciones (Visual Studio - 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 de script 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 script. 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 de script.
Vea también
Conceptos
Información de versión de JScript
Otros recursos
Escribir, compilar y depurar código JScript