1.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java Mon Jun 17 19:52:10 2013 +0200
1.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java Mon Jun 17 19:55:31 2013 +0200
1.3 @@ -19,12 +19,14 @@
1.4
1.5 import java.net.URL;
1.6 import java.util.ArrayList;
1.7 +import java.util.Arrays;
1.8 import java.util.Collections;
1.9 import java.util.Enumeration;
1.10 import java.util.List;
1.11 import java.util.TooManyListenersException;
1.12 import javafx.beans.value.ChangeListener;
1.13 import javafx.scene.web.WebEngine;
1.14 +import javax.script.Invocable;
1.15 import netscape.javascript.JSObject;
1.16
1.17 /**
1.18 @@ -99,8 +101,7 @@
1.19 protected Fn defineFn(String code, String... names) {
1.20 StringBuilder sb = new StringBuilder();
1.21 sb.append("(function() {");
1.22 - sb.append(" var x = {};");
1.23 - sb.append(" x.fn = function(");
1.24 + sb.append(" return function(");
1.25 String sep = "";
1.26 for (String n : names) {
1.27 sb.append(sep).append(n);
1.28 @@ -109,7 +110,6 @@
1.29 sb.append(") {\n");
1.30 sb.append(code);
1.31 sb.append("};");
1.32 - sb.append("return x;");
1.33 sb.append("})()");
1.34
1.35 JSObject x = (JSObject) engine.executeScript(sb.toString());
1.36 @@ -127,7 +127,11 @@
1.37 @Override
1.38 public Object invoke(Object thiz, Object... args) throws Exception {
1.39 try {
1.40 - return fn.call("fn", args); // NOI18N
1.41 + List<Object> all = new ArrayList<Object>(args.length + 1);
1.42 + all.add(thiz == null ? fn : thiz);
1.43 + all.addAll(Arrays.asList(args));
1.44 + Object ret = fn.call("call", all.toArray()); // NOI18N
1.45 + return ret == fn ? null : ret;
1.46 } catch (Error t) {
1.47 t.printStackTrace();
1.48 throw t;