Sembra una cosa complicata, ma non è così.
Supponiamo di voler chiamare il metodo
work
della nostra applet, e di passargli una stringa come argomento.Basta una riga di codice ActionScript:
ExternalInterface.call("document.workerApplet.work", arg);
Perché il metodo sia visibile deve essere dichiarato pubblico:
public void work(String arg) {
/* ... */
}
/* ... */
}
Se la computazione è pesante ricordatevi di avviarla in un thread separato, altrimenti l'esecuzione si bloccherà finché il metodo non ritorna.
Naturalmente l'applet deve essere inclusa nello stesso wrapper HTML:
<APPLET id="workerApplet"
code="WorkerApplet.class" codebase="." align="baseline"
width="0" height="0" MAYSCRIPT="true" />
code="WorkerApplet.class" codebase="." align="baseline"
width="0" height="0" MAYSCRIPT="true" />
Passiamo ora alla comunicazione da un'applet java a un'applicazione Flex.
In questo caso le cose si complicano un po'.
Prima di tutto è necessario includere il parametro
MAYSCRIPT
nel tag APPLET
.Poi bisogna registrare il metodo ActionScript in modo che sia accessibile tramite JavaScript:
// registration
private function registerCallback():void {
ExternalInterface.addCallback(
"externalComputationComplete",
externalComputationComplete);
}
// callback
public function externalComputationComplete(s:String):void {
Alert.show("Applet returned: " + s);
}
private function registerCallback():void {
ExternalInterface.addCallback(
"externalComputationComplete",
externalComputationComplete);
}
// callback
public function externalComputationComplete(s:String):void {
Alert.show("Applet returned: " + s);
}
Ora si costruisce una funzione JavaScript che chiama il metodo registrato come
"externalComputationComplete"
:<SCRIPT LANGUAGE="JavaScript">
function callFlexApp(s) {
var flexApp = document.getElementById("flexApp");
flexApp.externalComputationComplete(s);
}
</SCRIPT>
function callFlexApp(s) {
var flexApp = document.getElementById("flexApp");
flexApp.externalComputationComplete(s);
}
</SCRIPT>
Da quanto ho sperimentato questa funzione deve essere dichiarata dopo il tag APPLET affinché sia visibile al codice java.
È ora possibile chiamare
callFlexApp
da Java:netscape.javascript.JSObject.getWindow(this)
.call("callFlexApp", new Object[] {"done"});
.call("callFlexApp", new Object[] {"done"});
Come si vede gli eventuali argomenti alla funzione JavaScript vanno passati in un array.
Inoltre per usare
JSObject
bisogna includere nel classpath il JAR $JAVA_HOME/jre/lib/plugin.jar
Ulteriori informazioni sulla comunicazione tra Flex e JavaScript si possono trovare al seguente link:
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7f17.html
Per la comunicazione Java - JavaScript si veda:
https://jdk6.dev.java.net/plugin2/liveconnect/
Mentre per una panoramica sui metodi di
JSObject
il javadoc si trova all'indirizzo:http://java.sun.com/javase/6/webnotes/6u10/plugin2/liveconnect/jsobject-javadoc/netscape/javascript/JSObject.html
È tutto, buona programmazione!
Nessun commento:
Posta un commento
I commenti sono moderati