There is a way for the JavaScript to tell the Java wrapper it is running: alert. Initialize bck2brwsr callback in alert handler. fx
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 20 Mar 2013 06:56:44 +0100
branchfx
changeset 85339166e462f8d
parent 852 671fc517fe17
child 854 acffc26790d7
There is a way for the JavaScript to tell the Java wrapper it is running: alert. Initialize bck2brwsr callback in alert handler.
rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/WebViewLauncher.java
rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java
     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