There is a way for the JavaScript to tell the Java wrapper it is running: alert. Initialize bck2brwsr callback in alert handler.
1.1 --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/WebViewLauncher.java Tue Mar 19 11:51:08 2013 +0100
1.2 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/WebViewLauncher.java Wed Mar 20 06:56:44 2013 +0100
1.3 @@ -72,14 +72,9 @@
1.4 @Override
1.5 void generateBck2BrwsrJS(StringBuilder sb, Bck2Brwsr.Resources loader) throws IOException {
1.6 sb.append("(function() {\n"
1.7 - + " this.jvmBridge = new Array();\n"
1.8 - + " this.jvmBridge.loadClass = Array.prototype.push;\n"
1.9 - + " var bridge = this.jvmBridge;\n"
1.10 - + " this.bck2brwsr = function() { return {\n"
1.11 - + " loadClass : function(name) {\n"
1.12 - + " return bridge.loadClass(name);\n"
1.13 - + " }"
1.14 - + " }; };\n"
1.15 + + " alert('bck2brwsr');\n"
1.16 + + " var impl = this.bck2brwsr;\n"
1.17 + + " this.bck2brwsr = function() { return impl; };\n"
1.18 + "})(window);\n"
1.19 );
1.20 }
2.1 --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java Tue Mar 19 11:51:08 2013 +0100
2.2 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java Wed Mar 20 06:56:44 2013 +0100
2.3 @@ -111,6 +111,10 @@
2.4 eng.setOnAlert(new EventHandler<WebEvent<String>>() {
2.5 @Override
2.6 public void handle(WebEvent<String> t) {
2.7 + if ("bck2brwsr".equals(t.getData())) {
2.8 + initBck2Brwsr(eng);
2.9 + return;
2.10 + }
2.11 JOptionPane.showMessageDialog(null, t.getData());
2.12 }
2.13 });
2.14 @@ -128,25 +132,10 @@
2.15 void initBck2Brwsr(WebEngine webEngine) {
2.16 JSObject jsobj = (JSObject) webEngine.executeScript("window");
2.17 LOG.info("window: " + jsobj);
2.18 - System.getProperties().put("webEngine", webEngine);
2.19 - Object prev = jsobj.getMember("jvmBridge");
2.20 - if (prev instanceof JSObject) {
2.21 - jsobj.setMember("jvmBridge", bridge);
2.22 - JSObject jso = (JSObject) prev;
2.23 - Object len = jso.getMember("length");
2.24 - if (len instanceof Integer) {
2.25 - for (int i = 0; i < (Integer) len; i++) {
2.26 - Object slt = jso.getSlot(i);
2.27 - if (slt instanceof String) {
2.28 - try {
2.29 - bridge.loadClass((String) slt);
2.30 - } catch (ClassNotFoundException ex) {
2.31 - LOG.log(Level.SEVERE, null, ex);
2.32 - }
2.33 - }
2.34 - }
2.35 - LOG.info("bck2brwsr: " + jsobj.getMember("bck2brwsr"));
2.36 - }
2.37 + Object prev = jsobj.getMember("bck2brwsr");
2.38 + if ("undefined".equals(prev)) {
2.39 + System.getProperties().put("webEngine", webEngine);
2.40 + jsobj.setMember("bck2brwsr", bridge);
2.41 }
2.42 }
2.43