javafx 内部使用了什么 javascript 引擎?

问题描述 投票:0回答:2

WebView 内置了 javascript 引擎。它使用什么引擎? openjdk和oracle jdk一样吗?可以像JSR 223引擎一样独立于WebView使用吗?

java javascript javafx
2个回答
21
投票

Oracle JRE 中的 JavaScript 运行时

完整的 Oracle Java Runtime 8 附带两个 JavaScript 引擎:

  1. Nashorn:“Nashorn 的目标是使用本机 JVM 在 Java 中实现轻量级高性能 JavaScript 运行时。该项目旨在使 Java 开发人员能够通过 JSR-223 将 JavaScript 嵌入到 Java 应用程序中,并使用jrunscript 命令行工具。” Nashorn 在 JDK 14 中已从 JDK 中删除
  2. JavaScriptCore:内置于 WebKit 实现中的 JavaScript 引擎,由 JavaFX 系统的 WebView 组件包装。

WebView 和 JavaFX 应用程序使用的 JavaScript 运行时

JavaFX Webkit 不使用 Nashorn,它使用 JavaScriptCore。

您可以使用 Nashorn 来编程 JavaFX 应用程序和 API(作为 Java 编程的替代方案),并且您可以使用 Nashorn 作为 JavaFX FXML 文档的 JavaFX 脚本引擎,但不能在 WebView 中使用 Nashorn 作为 JavaScript 引擎。

背景来源信息

JavaFX 开发人员在 JavaFX 邮件列表上提供了一些关于 WebView 中 JavaScript 实现的信息。引用 Oracle JavaFX 开发人员 Richard Bair 的话(他又引用 WebKit 开发人员 Olivier Hunt 的话):

嗯……事情是这样的。 WebKit 默认带有 JavaScriptCore,这就是我们使用的 JS 引擎。这是相当不错的。我的理解是 JavaScriptCore(又名 SquirrelFish 又名 Nitro)与 Safari 使用的 JS 引擎相同。当 Chrome 和 Apple 都是 WebKit 的一部分时,Google 放入 WebKit 的抽象层之一就是能够替换 JavaScript 引擎。当 Google 将 WebKit 分叉为 Blink 时,WebKit 项目对不同 JS VM 进行抽象的需求就消失了。因此,WebKit 人员一直在讨论删除这些抽象,这样
您将无法更换 JS 引擎

,[更多信息]。如果/当这种情况发生时,我们将很难(或不可能)切换到 Nashorn 的 WebView。我们不会分叉 WebKit,所以我们必须遵循 WebKit 的做法。 “支持V8给webkit带来了相当大的负担,有很多 支持多个所需的大型、繁琐且昂贵的抽象 JS 引擎(请参阅多年前有关该主题的原始讨论)。

此外,我们只会在 WebKit2 中支持 JSC,所以我认为没有什么可以 至少让我相信保持对多个 JS 引擎的支持对项目有好处。”- Oliver Hunt

免责声明

此答案仅与 Oracle Java 8 版本相关;替代和未来的 JavaFX 和 Java 实现可能有不同的内部实现。

可以像JSR 223引擎一样独立于WebView使用吗?


WebView 中的 JavaScriptCore 不能与 WebView 分开用作 JSR 223 引擎(据我所知)。

我认为最好将支持 WebView 的 JavaScriptCore 实现视为 WebView 组件的内部实现细节,而不是将 JavaScript 实现视为在其他地方使用的通用 JavaScript 运行时。除了在 WebView 中的特定用途之外,它不是官方支持的组件,并且当在 WebView 中使用时,公共 WebView API 会阻止您了解它所使用的 JavaScript 运行时的实现细节:这样,它就故意对用户不透明,其中 JavaScript 运行时是实际上用于在 WebView 组件中执行 JavaScript。

更新

5
投票

由于OP更关心JavaFX WebView,所以使用JavaScriptCore

。请阅读JewelSea的回答

以获得更好的理解。
JavaFX Webkit 不使用 Nashorn,它使用 JavaScriptCore

Oracle Nashorn

是 Java 8 中的 JavaScript 引擎。在 Java 7 之前,使用的 JavaScript 引擎基于
Mozilla Rhino


是的,Oracle JDK 和 OpenJDK 是一样的。

您可以在

Oracle 网站

上找到有关 Nashorn 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.