R
Richard Maher
Hi,
Using netscape.javascript.JSObject (LiveConnect) I want/need to pass a
Function Reference to my Java Applet so that it can either call that
directly, or pass it to a static JavaScript function that will then redirect
the call to the appropriate anonymous function that formed a closure.
Please forgive me if the terminology is not strictly correct, but I hope you
can still understand what I'm trying to do.
I thought the second argument to JSObject.call could be an array of Strings
*or* Objects but trying to get a JavaScript object (or a reference/pointer
to it) to survive the Java Applet membrane (without some sort of
serialize/deserialize) is proving difficult. Am I missing something obvious?
Does anyone have a small example I can look at?
Maybe it's as easy as the first argument to JSObject.call can be a
JavaScript VARiable? I'll give it a go. . .
Cheers Richard Maher
//This is called from the "onload" event
function load() {
myFunc = setClosure();
myFunc();
chan = document.getElementById("AnonCallApplet");
return;
}
// This is called from the Applet
function jsMethod(javaInt, javaFunc) {
alert('Integer ' + javaInt);
alert('JavaFunc ' + javaFunc.toString());
javaFunc();
return;
}
function setClosure() {
var lclNum = 0;
return function(){
lclNum++;
alert("lclNum = " + lclNum);
}
}
// This is called by some user-driven event (onchange, onclick. . ).
function callApplet() {
alert(myFunc.toString());
chan.javaMethod(step, myFunc)
return true;
}
//Here's the Applet
import java.applet.Applet;
import java.io.IOException;
import netscape.javascript.JSObject;
import netscape.javascript.JSException;
public class AnonCallApplet extends Applet {
private JSObject browser;
private static int sumNum = 0;
private int addNum;
public void init(){
try {
browser = JSObject.getWindow(this); }
catch (netscape.javascript.JSException e) {
e.printStackTrace(); }
catch (Exception e) {
e.printStackTrace(); }
}
public void javaMethod (String jsNum, String jsFunc) {
addNum = Integer.parseInt(jsNum);
sumNum += addNum;
Object args[] = {(Object)new Integer(sumNum), (Object)jsFunc};
try {
browser.call("jsMethod", args);}
catch (JSException e){
System.out.println("Error when calling jsMethod()"); }
}
public void destroy() {
super.destroy();
}
}
Using netscape.javascript.JSObject (LiveConnect) I want/need to pass a
Function Reference to my Java Applet so that it can either call that
directly, or pass it to a static JavaScript function that will then redirect
the call to the appropriate anonymous function that formed a closure.
Please forgive me if the terminology is not strictly correct, but I hope you
can still understand what I'm trying to do.
I thought the second argument to JSObject.call could be an array of Strings
*or* Objects but trying to get a JavaScript object (or a reference/pointer
to it) to survive the Java Applet membrane (without some sort of
serialize/deserialize) is proving difficult. Am I missing something obvious?
Does anyone have a small example I can look at?
Maybe it's as easy as the first argument to JSObject.call can be a
JavaScript VARiable? I'll give it a go. . .
Cheers Richard Maher
//This is called from the "onload" event
function load() {
myFunc = setClosure();
myFunc();
chan = document.getElementById("AnonCallApplet");
return;
}
// This is called from the Applet
function jsMethod(javaInt, javaFunc) {
alert('Integer ' + javaInt);
alert('JavaFunc ' + javaFunc.toString());
javaFunc();
return;
}
function setClosure() {
var lclNum = 0;
return function(){
lclNum++;
alert("lclNum = " + lclNum);
}
}
// This is called by some user-driven event (onchange, onclick. . ).
function callApplet() {
alert(myFunc.toString());
chan.javaMethod(step, myFunc)
return true;
}
//Here's the Applet
import java.applet.Applet;
import java.io.IOException;
import netscape.javascript.JSObject;
import netscape.javascript.JSException;
public class AnonCallApplet extends Applet {
private JSObject browser;
private static int sumNum = 0;
private int addNum;
public void init(){
try {
browser = JSObject.getWindow(this); }
catch (netscape.javascript.JSException e) {
e.printStackTrace(); }
catch (Exception e) {
e.printStackTrace(); }
}
public void javaMethod (String jsNum, String jsFunc) {
addNum = Integer.parseInt(jsNum);
sumNum += addNum;
Object args[] = {(Object)new Integer(sumNum), (Object)jsFunc};
try {
browser.call("jsMethod", args);}
catch (JSException e){
System.out.println("Error when calling jsMethod()"); }
}
public void destroy() {
super.destroy();
}
}