# HG changeset patch # User Jaroslav Tulach # Date 1371491731 -7200 # Node ID 29302b4c07769eeb5981337bb07a526454a8ba53 # Parent 743f2fe4f0bc3625acd7686d874d9203c819f7ec Using the same trick with call also inside WebView diff -r 743f2fe4f0bc -r 29302b4c0776 launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java Mon Jun 17 19:52:10 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java Mon Jun 17 19:55:31 2013 +0200 @@ -19,12 +19,14 @@ import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.List; import java.util.TooManyListenersException; import javafx.beans.value.ChangeListener; import javafx.scene.web.WebEngine; +import javax.script.Invocable; import netscape.javascript.JSObject; /** @@ -99,8 +101,7 @@ protected Fn defineFn(String code, String... names) { StringBuilder sb = new StringBuilder(); sb.append("(function() {"); - sb.append(" var x = {};"); - sb.append(" x.fn = function("); + sb.append(" return function("); String sep = ""; for (String n : names) { sb.append(sep).append(n); @@ -109,7 +110,6 @@ sb.append(") {\n"); sb.append(code); sb.append("};"); - sb.append("return x;"); sb.append("})()"); JSObject x = (JSObject) engine.executeScript(sb.toString()); @@ -127,7 +127,11 @@ @Override public Object invoke(Object thiz, Object... args) throws Exception { try { - return fn.call("fn", args); // NOI18N + List all = new ArrayList(args.length + 1); + all.add(thiz == null ? fn : thiz); + all.addAll(Arrays.asList(args)); + Object ret = fn.call("call", all.toArray()); // NOI18N + return ret == fn ? null : ret; } catch (Error t) { t.printStackTrace(); throw t;