Apply your JS skills to key Mozilla projects as an MDN Fellow! http://mzl.la/MDNFellowship

mozilla
Los resultados de tu búsqueda

    Utilizar las clases de LiveConnect

    Utilizar las clases de LiveConnect

    Todos los objetos JavaScript aparecen dentro del código Java como instancias de netscape.javascript.JSObject. Cuando invoca un método en su código Java, puede pasarlos a un objeto JavaScript como uno de sus argumentos. Para hacerlo, deberá definir el parámetro formal correspondiente de el método ha ser del tipo JSObject.

    También, a cualquier tiempo utilice los objetos JavaScript en su código Java, deberá poner la invocación al objeto JavaScript dentro de la sentencia try...catch con manejadores de excepciones de tipo netscape.javascript.JSException. Esto permite que su código Java pueda manipular los errores en la ejecución del código JavaScript el cual aparece en Java como excepciones de tipo JSException.

    Accesando a JavaScript con JSObject

    Por ejemplo, supóngase que está trabajando con la clase Java llamada JavaDog. Como se muestra en el código siguiente, el constructor de JavaDog toma el objeto JavaScript jsDog, el cual está definido como tipo JSObject, como un argumento:

    import netscape.javascript.*;
    
    public class JavaDog
    {
        public String dogBreed;
        public String dogColor;
        public String dogSex;
    
        // define el constructor de la clase
        public JavaDog(JSObject jsDog)
        {
            // utilice try...catch para manejar las JSExceptions aquí
            this.dogBreed = (String)jsDog.getMember("breed");
            this.dogColor = (String)jsDog.getMember("color");
            this.dogSex = (String)jsDog.getMember("sex");
        }
    }
    

    Nótese que el método getMember de JSObject es utilizado para acceder a las propiedades del objeto JavaScript object. El ejemplo previo utiliza getMember para asignar el valor de la propiedad JavaScript jsDog.breed al miembro de datos Java JavaDog.dogBreed.

    Nota: Un ejemplo más realista colocaría la invocación a getMember dentro de una sentencia try...catch para manipular los errores del tipo JSException. Véase la manipulación de excepciones JavaScript en Java para mayor información.

    Para obtener un mejor sentido de como trabaja getMember, mírese la definición del objeto personalizado JavaScript Dog:

    function Dog(breed,color,sex) {
       this.breed = breed
       this.color = color
       this.sex = sex
    }
    

    Puede crear una instancia JavaScript de Dog llamado gabby como sigue:

    gabby = new Dog("lab","chocolate","female")
    

    Si evalúa gabby.color, puede ver que esta tiene el valor "chocolate". Ahora supóngase que crea una instancia de JavaDog en su código JavaScript mediante el paso del objeto gabby al constructor como sigue:

    javaDog = new Packages.JavaDog(gabby)
    

    Si evalúa javaDog.dogColor, puede ver que este también tiene el valor de "chocolate", debido a que el método getMember en el constructor de Java asigna a dogColor el valor de gabby.color.

    Manejo de Excepciones JavaScript en Java

    Cuando el código JavaScript invocado desde Java falla en tiempo de ejecución, este lanza una excepción. Si está invocando el código JavaScript desde Java, puede atrapar esta excepción en una sentencia <tt>try...catch</tt>. La excepción JavaScript está disponible para su código Java como una instancia de netscape.javascript.JSException.

    JSException es un envoltorio Java alrededor de cualquier tipo de excepción lanzada por JavaScript, similar a la manera en que las intancias de JSObject son envoltorios para objetos JavaScript. Utilice JSException cuado esté evaluando código JavaScript en Java.

    Cuando esté evaluando código JavaScript en Java, las siguientes situaciones pueden causar errores en tiempo de ejecución:

    • El código JavaScript no es evaluado, debido tanto al error en la compilación JavaScript o a algún otro error que ocurrió en tiempo de ejecución. El intérprete JavaScript genera un mensaje de error que es convertido en una instancia de JSException.
    • Java evúa exitósamente el código JavaScript, pero el código JavaScript ejecuta una sentencia no manejada de lanzamiento. JavaScript lanza una excepción que está envuelta como una intancia de JSException. Utilice el método getWrappedException de JSException para desenvolver esta excepción en Java.

    Por ejemplo, supóngase que el objeto Java eTest evalúa la cadena jsCode que es pasada por usted. Puede responder tanto a un tipo de error en tiempo de ejecución que la evaluación causa por la implementación de un manejador de excepción tal como sigue:

    import netscape.javascript.JSObject;
    import netscape.javascript.JSException;
    
    public class eTest {
        public static Object doit(JSObject obj, String jsCode) {
            try {
                obj.eval(jsCode);
            } catch (JSException e) {
                if (e.getWrappedException()==null)
                    return e;
                return e.getWrappedException();
            }
            return null;
        }
    }
    

    En este ejemplo, el código en la sentencia try intenta evaluar la cadena jsCode que es pasada por usted. Permítase decir que pasa la cadena "myFunction()" como el valor de jsCode. Si myFunction no está definida como una función JavaScript, el intérprete JavaScript no puede evaluar jsCode. El intérprete genera un mensjae de error, que el manejador Java atrapa el mensaje y el método doit retorna una instancia de netscape.javascript.JSException.

    Sin embargo, supóngase que myFunction está definida en JavaScript como sigue:

    function myFunction() {
       try {
          if (theCondition == true) {
             return "Everything's ok";
          } else {
             throw "JavaScript error occurred" ;
          }
       } catch (e) {
          if (canHandle == true) {
             handleIt();
          } else {
             throw e;
          }
       }
    }
    

    Si la condición theCondition es falsa, la función lanza una excepción. La excepción es atrapada en el código JavaScript y si canHandle es verdadera, JavaScript la maneja. Si canHandle es falso, la excepción es relanzada,el manejador Java la atrapa y el método doit retorna una cadena Java:

    JavaScript error occurred
    

    Véase Exception Handling Statements para una completa información acerca de las excepciones JavaScript.

    Compatibilidad con Versiones anteriores

    En JavaScript 1.3 y versiones anteriores, la clase JSException tiene tres constructores públicos los cuales opcionalmente tomasn una cadena de argumento, especificando el mensaje a detalle u otra información para la excepción. El método getWrappedException no estaba disponible.

    Utilice la sentencia try...catch tal como el siguiente manejador de excepciones LiveConnect en JavaScript 1.3 y versiones anteriores:

    try {
       global.eval("foo.bar = 999;");
    } catch (Exception e) {
       if (e instanceof JSException) {
          jsCodeFailed()";
       } else {
          otherCodeFailed();
       }
    }
    

    En este ejemplo, la sentencias eval falla si foo no está definida. El bloque catch ejecuta el método jsCodeFailed si la sentencia eval en el bloque try lanza una JSException; el método otherCodeFailed se ejecuta si el bloque try lanza cualquier otro error.

    Etiquetas y colaboradores del documento

    Contributors to this page: DSN XP, teoli, Mgjbot
    Última actualización por: teoli,