Ho un'applet java in esecuzione in un browser che sta chiamando alcune funzioni javascript e mi aspetto un risultato da queste funzioni. Questo è il lavoro con le seguenti configurazioni:Le applet Java non sono in grado di comunicare con javascript in Firefox su Mac OS?
- Internet Explorer
- FireFox/Windows
- Safari/Mac
ma non funziona con Firefox su MAC OS
La fonte di il problema sembra essere le chiamate win.eval che restituiscono sempre null. Ho provato questo con Firefox 3.0.6 su un Mac OS X 10.4.11
Un po 'di codice:
JSObject win = (JSObject) JSObject.getWindow(this);
Object exp = win.eval("testfunc()");
System.out.println("exp = " + exp.toString());
Questo innesca un java.lang.NullPointerException (exp.toString)() dichiarazione) . La funzione javascript di testfunc restituisce true.
Ho provato con win.call e ottenuto lo stesso risultato.
Il mio tag applet include gli attributi mayscript e scriptable.
Ho trovato la risposta grazie a Tristan. Testando la sua soluzione ho creato un test davvero semplice che potrebbe funzionare e ha funzionato a modo mio per trovare il colpevole. Ero sicuro di aver fatto i miei test con un test vuoto vuoto() che è appena tornato vero, ma probabilmente non l'ho fatto perché in quel caso funziona. Il vero problema era che la funzione chiamava un metodo pubblico dell'applet. Liveconnect non sembra essere in grado di gestire quel caso in Firefox Mac.
Lasciate che vi faccia un esempio: class
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());
}
}
E il codice javascript:
function jsfunc() {
var myApplet = document.getElementById("applet_id");
return myApplet.getMyValue() + 5;
}
exp sarà nullo in someFunction PERCHÉ jsFunc chiama il getMyValue() metodo dell'applet. Se togli tutte le chiamate alle proprietà dell'applet sei fantastico.
Per risolvere il mio problema ho deciso di fornire tutti i valori dell'applet che ho trovato come parametri della mia funzione javascript e ora sono a posto.
Questo potrebbe non essere sempre il caso, se il javascript cambia lo stato dell'applet ... Sono stato fortunato :)
Chiamare la funzione non è un problema, ottenere il risultato è. Con le istruzioni di debug posso vedere chiaramente che la funzione viene eseguita, ma in qualche modo il valore di ritorno si perde e ottengo solo "null". –