Разрешить javascript управлять некоторыми вещами окружающей среды

Я хочу использовать GraalVM для запуска написанного пользователем кода javascript (я пишу проект Java 11).

Могу ли я передать объекты Java в файл javascript, в javascript я хочу написать что-то вроде

shrek.shedLayer();

и когда моя программа Java выполняет этот оператор, это эквивалентно тому, как если бы она (программа Java) запускалась напрямую

someLong.pieceOf().Code();
Maybe multipleLines = new Maybe();
someLong.add(multipleLines);

или что-то еще.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
53
1

Ответы 1

Да, вы можете сделать так, чтобы ваш Java-код оценивал JavaScript. Да, вы можете передавать объекты Java в контекст JavaScript. Да, вы можете возвращать значения JavaScript в Java.

Вот пример кода Java, который создает контекст JavaScript, оценивает строку кода JavaScript, определяющую функцию, сохраняет эту функцию в переменной, вызывает ее, передавая объекты Java в качестве параметров, и печатает возвращаемое значение вызова этой функции.

import org.graalvm.polyglot.*;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class ExtListDir {
    public static void main(String[] args) throws java.io.IOException {
        final Context context = Context.create("js");
        String s = "name + ': ' + size";
        if (args.length == 1) {
            s = args[0];
        }
        final Value lambda = context.eval("js",
            "(function(name, size) { return " + s + "})");
        try (Stream<Path> paths = Files.walk(Paths.get("."))) {
            paths.filter(Files::isRegularFile).forEach((Path p) -> {
                File f = p.toFile();
                Value v = lambda.execute(f.getName(), f.length());
                System.out.println(v);
            });
        }
    }
}

Если вы хотите использовать классы Java из контекста JS, вы можете сослаться на них с помощью Java.type(), например, вот Фрагмент JS, который использует BigInteger Java:

const BigInteger = Java.type('java.math.BigInteger');
var text = BigInteger.valueOf(10).pow(100)
          .add(BigInteger.valueOf(43)).toString();

Но там нет примера JavaScript, контролирующего среду Java.

theonlygusti 27.01.2019 02:17

Я не уверен на 100%, что вы подразумеваете под «JavaScript, управляющим средой Java», но если вы хотите создать несколько контекстов Java из JavaScript, в настоящее время это не работает. Я добавил фрагмент, чтобы показать, как получить доступ к классам Java из JavaScript.

Oleg Šelajev 27.01.2019 16:16

Другие вопросы по теме