# HG changeset patch # User Jaroslav Tulach # Date 1363759004 -3600 # Node ID 39166e462f8d9e8581eb8740dfafdaf2a96c6edd # Parent 671fc517fe17010aa4aa2f68eea5edc5d7752815 There is a way for the JavaScript to tell the Java wrapper it is running: alert. Initialize bck2brwsr callback in alert handler. diff -r 671fc517fe17 -r 39166e462f8d rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/WebViewLauncher.java --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/WebViewLauncher.java Tue Mar 19 11:51:08 2013 +0100 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/WebViewLauncher.java Wed Mar 20 06:56:44 2013 +0100 @@ -72,14 +72,9 @@ @Override void generateBck2BrwsrJS(StringBuilder sb, Bck2Brwsr.Resources loader) throws IOException { sb.append("(function() {\n" - + " this.jvmBridge = new Array();\n" - + " this.jvmBridge.loadClass = Array.prototype.push;\n" - + " var bridge = this.jvmBridge;\n" - + " this.bck2brwsr = function() { return {\n" - + " loadClass : function(name) {\n" - + " return bridge.loadClass(name);\n" - + " }" - + " }; };\n" + + " alert('bck2brwsr');\n" + + " var impl = this.bck2brwsr;\n" + + " this.bck2brwsr = function() { return impl; };\n" + "})(window);\n" ); } diff -r 671fc517fe17 -r 39166e462f8d rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java Tue Mar 19 11:51:08 2013 +0100 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java Wed Mar 20 06:56:44 2013 +0100 @@ -111,6 +111,10 @@ eng.setOnAlert(new EventHandler>() { @Override public void handle(WebEvent t) { + if ("bck2brwsr".equals(t.getData())) { + initBck2Brwsr(eng); + return; + } JOptionPane.showMessageDialog(null, t.getData()); } }); @@ -128,25 +132,10 @@ void initBck2Brwsr(WebEngine webEngine) { JSObject jsobj = (JSObject) webEngine.executeScript("window"); LOG.info("window: " + jsobj); - System.getProperties().put("webEngine", webEngine); - Object prev = jsobj.getMember("jvmBridge"); - if (prev instanceof JSObject) { - jsobj.setMember("jvmBridge", bridge); - JSObject jso = (JSObject) prev; - Object len = jso.getMember("length"); - if (len instanceof Integer) { - for (int i = 0; i < (Integer) len; i++) { - Object slt = jso.getSlot(i); - if (slt instanceof String) { - try { - bridge.loadClass((String) slt); - } catch (ClassNotFoundException ex) { - LOG.log(Level.SEVERE, null, ex); - } - } - } - LOG.info("bck2brwsr: " + jsobj.getMember("bck2brwsr")); - } + Object prev = jsobj.getMember("bck2brwsr"); + if ("undefined".equals(prev)) { + System.getProperties().put("webEngine", webEngine); + jsobj.setMember("bck2brwsr", bridge); } }