Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8289537

Webview not working as Javascript is not able to see the member function which is set by Java via setMember() method

XMLWordPrintable

    • web
    • generic
    • generic

      ADDITIONAL SYSTEM INFORMATION :
      System - Windows 10 OS.
      Java - openjdk- <link> (openjdk-8u322 - zulu distribution)


      A DESCRIPTION OF THE PROBLEM :
      Openjdk - 8.0.312 - Onwards - Webview not working as Javascript is not able to see the member function which is set by Java via setMember() method.

      Because of this the initial communication between Java and Javascript breaks due to which Library is loading which empty data ie no values populated.

      NOTE: This was working fine till Openjdk - 8.0.302 and broke after that.


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Steps
      1. Setup the usual webengine
      webEngine.setJavaScriptEnabled(true);
                  webEngine.load(url.toExternalForm());

                  JSObject jsobj = (JSObject) webEngine.executeScript("window");
                  jsobj.setMember("javaCallback", callbackFromJS);
      webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
                      @Override
                      public void changed(ObservableValue<? extends Worker.State> ov, Worker.State oldState, Worker.State newState) {
                          if (newState == Worker.State.SUCCEEDED && (null != callback)) {
                          }
                      }
                  });
                  webEngine.setOnAlert(event -> showAlert(event.getData()));

      2. In the Javascript layer
      try {
                  javaCallback.onJSReady();
              } catch (ex) { };
      This call gives the error that javaCallback is undefined.
      This was working fine till openjdk-8u302.


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The javaCallback should be visible to Javascript layer as its correctly set by Java via setMember().
      ACTUAL -
      gives the error that javaCallback is undefined.
      This was working fine till openjdk-8u302.

      ---------- BEGIN SOURCE ----------
      webEngine.setJavaScriptEnabled(true);
                  webEngine.load(url.toExternalForm());

                  JSObject jsobj = (JSObject) webEngine.executeScript("window");
                  jsobj.setMember("javaCallback", callbackFromJS);
      webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
                      @Override
                      public void changed(ObservableValue<? extends Worker.State> ov, Worker.State oldState, Worker.State newState) {
                          if (newState == Worker.State.SUCCEEDED && (null != callback)) {
                          }
                      }
                  });
                  webEngine.setOnAlert(event -> showAlert(event.getData()));

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      No workaround

      FREQUENCY : always


            pnarayanaswa Praveen Narayanaswamy
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: