verificar - ¿cómo activar el plugin de java en google chrome?




¿Los Applets de Java no se pueden comunicar con javascript dentro de Firefox en Mac OS? (2)

¿Funcionaría al acceder a uno de los objetos globales en la pantalla? Es decir,

En JavaScript:

window.testfunc = function() { //... }

En Applet:

win.eval("window.testfunc()") // or maybe just win.eval("testfunc()")

Ese sería mi experimento. Pero he estado llamando a "window.close ()" en FF en Mac OS X, y eso todavía funciona.

Tengo un applet de java que se ejecuta en un navegador que llama a algunas funciones de javascript y espera un resultado de estas funciones. Esto está funcionando con las siguientes configuraciones:

  • explorador de Internet
  • FireFox / Windows
  • Safari / Mac

PERO no funciona con Firefox en MAC OS

El origen del problema parece ser las llamadas win.eval que siempre devuelven null. Probé esto con Firefox 3.0.6 en Mac OS X 10.4.11

Un poco de código:

JSObject win = (JSObject) JSObject.getWindow(this);
Object exp = win.eval("testfunc()");
System.out.println("exp = " + exp.toString());

Esto desencadena una instrucción java.lang.NullPointerException (exp.toString ())). La función javascript de testfunc simplemente devuelve verdadero.

Intenté con win.call y obtuve el mismo resultado.

Mi etiqueta de applet incluye los atributos mayscript y scriptable.

Encontré la respuesta gracias a Tristan. Probando su solución, creé una prueba realmente simple que podría funcionar y funcionó para encontrar al culpable. Estaba seguro de que hice mis pruebas con un testfunc vacío () que acaba de volverse verdadero, pero probablemente no lo hice porque en ese caso SI FUNCIONA. El verdadero problema aquí era que la función llamaba un método público del applet. Liveconnect no parece ser capaz de manejar ese caso en Firefox Mac.

Dejame darte un ejemplo :

Clase de Java:

public class MyApplet extends Applet {  
     public int getMyValue() {
         return 5;
     }

     public void somefunction() {
         JSObject win = (JSObject) JSObject.getWindow(this);
         Object exp = win.eval("jsfunc()");
         System.out.println("exp = " + exp.toString());
     }
}

Y el código javascript:

function jsfunc() {
    var myApplet = document.getElementById("applet_id");
    return myApplet.getMyValue() + 5;
}

exp será nulo en alguna función PORQUE jsfunc llama al método getMyValue () del applet. Si elimina todas las llamadas a las propiedades del applet, está genial.
Para resolver mi problema, decidí dar todos los valores del applet que necesitaba como parámetros de mi función javascript y ahora estoy bien.
Ese no siempre es el caso, si el javascript cambia el estado del applet ... tuve suerte :)


No he usado la aplicación applet desde hace tiempo, pero si la recuerdo correctamente para permitir que un Applet pueda usar el código JS, debe habilitar el atributo mayscript en su etiqueta de applet o un param mayscript en la notación de etiqueta de objeto.

Para la comunicación del otro modo JS a Applet, también debe usar el atributo o parámetro de secuencias de comandos, por ejemplo:

<applet code="..." mayscript="true" />

Esto le permite a su applet usar funciones de script.

<applet code="..." scriptable="true" />




applet