1.1 --- a/ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java Mon Jun 17 18:07:59 2013 +0200
1.2 +++ b/ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java Mon Jun 17 19:56:54 2013 +0200
1.3 @@ -26,7 +26,6 @@
1.4 import java.io.InputStreamReader;
1.5 import java.util.logging.Level;
1.6 import java.util.logging.Logger;
1.7 -import javafx.scene.web.WebEngine;
1.8 import net.java.html.json.Model;
1.9 import netscape.javascript.JSObject;
1.10 import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.11 @@ -126,15 +125,17 @@
1.12 throw new IllegalStateException(ex);
1.13 }
1.14 }
1.15 - WebEngine web = (WebEngine) System.getProperties().get("webEngine");
1.16 - web.executeScript(sb.toString());
1.17 - Object ko = web.executeScript("ko");
1.18 + exec(sb.toString());
1.19 + Object ko = exec("ko");
1.20 assert ko != null : "Knockout library successfully defined 'ko'";
1.21
1.22 Console.register();
1.23 KObject = (JSObject) kObj();
1.24 }
1.25
1.26 + @JavaScriptBody(args = { "s" }, body = "return eval(s);")
1.27 + private static native Object exec(String s);
1.28 +
1.29 @JavaScriptBody(args = {}, body =
1.30 " var k = {};"
1.31 + " k.array= function() {"
2.1 --- a/ko-fx/src/test/java/org/apidesign/html/kofx/KnockoutFXTest.java Mon Jun 17 18:07:59 2013 +0200
2.2 +++ b/ko-fx/src/test/java/org/apidesign/html/kofx/KnockoutFXTest.java Mon Jun 17 19:56:54 2013 +0200
2.3 @@ -24,6 +24,7 @@
2.4 import javafx.scene.web.WebEngine;
2.5 import net.java.html.BrwsrCtx;
2.6 import netscape.javascript.JSObject;
2.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.8 import org.apidesign.bck2brwsr.vmtest.VMTest;
2.9 import org.apidesign.html.context.spi.Contexts;
2.10 import org.apidesign.html.json.spi.Technology;
2.11 @@ -69,17 +70,11 @@
2.12 return json;
2.13 }
2.14
2.15 - private static JSObject eval;
2.16 @Override
2.17 - public Object executeScript(String script, Object[] arguments) {
2.18 - if (eval == null) {
2.19 - WebEngine web = (WebEngine) System.getProperties().get("webEngine");
2.20 - eval = (JSObject) web.executeScript("(function(scope) {"
2.21 - + " scope.jko = {};"
2.22 - + " scope.jko.compute = function(s, args) { var f = new Function(s); return f.apply(null, args); }"
2.23 - + "})(window); window.jko;");
2.24 - }
2.25 - return eval.call("compute", script, arguments);
2.26 - }
2.27 + @JavaScriptBody(args = { "s", "args" }, body = ""
2.28 + + "var f = new Function(s); "
2.29 + + "return f.apply(null, args);"
2.30 + )
2.31 + public native Object executeScript(String script, Object[] arguments);
2.32
2.33 }