WebView имеет встроенный механизм javascript. Какой двигатель используется для этого? Это то же самое для openjdk и oracle jdk? Может ли он использоваться отдельно от WebView, как JSR 223?
Какой механизм javascript используется внутри javafx?
Ответ 1
JavaScript Runtimes в Oracle JRE
Полная версия Oracle Runtime 8 поставляется с двумя механизмами JavaScript:
- Nashorn: "Задача Nashorn - реализовать легкую высокопроизводительную среду исполнения JavaScript на Java с родным JVM. Этот проект намеревается включить внедрение Java-разработчиков JavaScript в Java-приложениях через JSR-223 и создавать свободно стоящие приложения JavaScript с помощью инструмента командной строки jrunscript."
- JavaScriptCore: механизм JavaScript, встроенный в реализацию WebKit, завернутый компонентом WebView, Система JavaFX.
Время выполнения JavaScript, используемое приложениями WebView и JavaFX
JavaFX Webkit не использует Nashorn, он использует JavaScriptCore.
Вы можете использовать Nashorn для программирования приложений JavaFX и API (в качестве альтернативы программированию на Java), и вы можете использовать Nashorn в качестве механизма JavaFX script для JavaFX FXML, но вы не можете использовать Nashorn в качестве механизма JavaScript в WebView.
Исходная информация фона
Существует некоторая информация о реализации JavaScript в WebView, предоставленная разработчиками JavaFX в списке рассылки JavaFX. Цитируя Ричарда Бэйра, разработчика Oracle JavaFX (который, в свою очередь, цитирует Оливье Ханта, разработчика WebKit):
Ну.... это так. По умолчанию WebKit поставляется с JavaScriptCore, и это движок JS, который мы используем. Это очень хорошо. Я понимаю, что JavaScriptCore (aka SquirrelFish aka Nitro) является тем же движком JS, который используется Safari. Когда Chrome и Apple были частью WebKit, одним из уровней абстракции, которые Google внес в WebKit, была возможность поменять механизм JavaScript. Когда Google разветвлял WebKit в Blink, потребность в проекте WebKit для абстракции для другой JS VM исчезла. Как следствие, ребята из WebKit говорили об удалении этих абстракций, так что вы не сможете заменить JS-движок, [дальнейшая информация]. Если/Когда это произойдет, нам будет сложно (или невозможно) переключиться на Nashorn для WebView. Мы не собираемся форкировать WebKit, поэтому мы должны следовать вместе с тем, что делает WebKit.
"Поддержка V8 ставит значительную нагрузку на webkit, существует ряд большие, громоздкие и дорогие абстракции, необходимые для поддержки нескольких JS (см. Оригинальные дискуссии по этой теме много лет назад).
Кроме того, мы будем поддерживать только АО в WebKit2, поэтому я не думаю, что убедите меня, по крайней мере, что поддержка нескольких JS-двигателей хороша для проекта". - Оливер Хант
Отказ
Этот ответ относится только к выпускам Oracle Java 8; альтернативные и будущие реализации JavaFX и Java могут иметь разные внутренние реализации.
Может ли он использоваться отдельно от WebView, как и JSR 223?
JavaScriptCore в WebView нельзя использовать отдельно от WebView как JSR 223 (насколько я знаю).
Я думаю, что лучше всего рассматривать реализацию JavaScriptCore для поддержки WebView в качестве внутренней детали реализации компонента WebView и не рассматривать реализацию JavaScript как универсальное время выполнения JavaScript, которое будет использоваться в другом месте. Он не является официально поддерживаемым компонентом, не зависящим от его использования в WebView, и, когда он используется там, общедоступный API WebView защищает вас от деталей реализации используемой в нем среды выполнения JavaScript. Таким образом, это преднамеренно непрозрачно для пользователей, для которых время выполнения JavaScript фактически используемый для выполнения JavaScript в компоненте WebView.
Ответ 2
Update
Поскольку OP больше озабочен JavaFX WebView, он использует JavaScriptCore
. Пожалуйста, прочитайте ответ JewelSea для лучшего понимания.
JavaFX Webkit не использует Nashorn, он использует JavaScriptCore
Oracle Nashorn
- это механизм JavaScript на Java 8. До появления Java 7 используемый механизм JavaScript был основан на Mozilla Rhino
.
Да, он одинаковый для Oracle JDK и OpenJDK.
Дополнительную информацию о Nashorn можно найти на сайте Oracle.