@MoZg911

Взаимодействие Java и JS приложений?

Есть приложение в котором можно выполнять скрипты на JS. Задача - из этого приложения отправлять e-mail. Хочу написать приложение для отправки email на Java. Приложение работает на OS Windows.

Как организовать взаимодействие JS и java программы? Какие способы взаимодействия существуют?

В JS можно создать ActiveXObject объект и работать с его полями и методами. Можно ли подобным образом организовать работу с Java приложением?

Или необходимо создавать веб-сервис и все запросы к Java приложению отправлять как http-запросы(не очень удобно для локального использования)?

PS. Роман Роман - большое спасибо за подробный ответ. Дело в том, что мне нужно вызвать именно метод java из js(сторонней программы со своим функционалом), а не вызвать js из java. Программа, которая выполняет js скрипт, выдает ошибку "Java - определение отсутствует", когда пытаюсь создать экземпляр java класса в скрипте через Java.type
  • Вопрос задан
  • 446 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alex_137
Здравствуйте. Наверное ответ по времени не актуален, но прокомментирую. Может быть кому то пригодиться:
Я использовал Java FX и его элемент WebView, получал объект окна браузера и вызывал обратные функции в javascript.
Получение объекта окна.
browser.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
  @Override
  public void changed(ObservableValue ov, State oldState, State newState) {
     if(newState == Worker.State.SUCCEEDED) {
          JSObject jsobj = (JSObject) browser.getEngine().executeScript("window");
 jsobj.setMember("bridge", jl);
       }
   }
});

Создаем так называемый мост
private Bridge jl = new Bridge();
public class Bridge {
   public String elementId() {      //отправляем обратно в SVG 
     System.out.println("receive id");
      return numberID;
  }
   public String elementIdText() {
      if (numberID.startsWith("tspan")) {
         String answer = "Java Callback";
         iclick = true;
         answer+=' '+ numberID;
        return answer;
     }
     return "Finish";
  }
}

javascript - обратные функции
function doCallbackText() {
   var SVG = document.getElementById('Capa_1');
   var path = bridge.elementId();   //читаем из приложения
  var path1 = bridge.elementIdText();
  if (path1!= "Finish") SVG.getElementById(path).textContent = path1;
   console.log(path1+"Вставляю текст");
}

Более подробно и другие методы смотри здесь: https://www.ap-impulse.com/java-and-javascript-con...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы