【问题标题】:What javascript engine used inside javafx?javafx中使用了什么javascript引擎?
【发布时间】:2015-05-07 14:33:27
【问题描述】:

WebView 具有内置的 javascript 引擎。它使用什么引擎? openjdk 和 oracle jdk 一样吗?是否可以与 WebView 分开使用,就像 JSR 223 引擎一样?

【问题讨论】:

    标签: java javascript javafx


    【解决方案1】:

    Oracle JRE 中的 JavaScript 运行时

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

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

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

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

    您可以使用Nashorn to program JavaFX applications and APIs (as an alternative to programming in Java),并且可以将 Nashorn 用作 JavaFX FXML 文档的 JavaFX 脚本引擎,但您不能将 Nashorn 用作 WebView 中的 JavaScript 引擎。

    背景来源信息

    JavaFX 邮件列表中的 JavaFX 开发人员提供了一些 information on the JavaScript implementation in WebView。引用 Oracle JavaFX 开发人员 Richard Bair 的话(他又引用了 WebKit 开发人员 Olivier Hunt):

    嗯……它是这样的。 WebKit 默认自带 JavaScriptCore,这就是我们使用的 JS 引擎。这是相当不错的。我的理解是 JavaScriptCore(又名 SquirrelFish 又名 Nitro)是 the same JS engine used by Safari。当 Chrome 和 Apple 都是 WebKit 的一部分时,谷歌在 WebKit 中的抽象层之一就是能够替换 JavaScript 引擎。当 Google 将 WebKit 分叉到 Blink 时,WebKit 项目对不同 JS VM 的抽象的需求就消失了。因此,WebKit 人员一直在讨论删除这些抽象,例如 you won't be able to swap out the JS engine、[further info]。如果/当这种情况发生时,我们将很难(或不可能)切换到 Nashorn for WebView。我们不打算分叉 WebKit,所以我们必须遵循 WebKit 的功能。

    “支持V8给webkit带来了相当大的负担,有很多 支持多个所需的大型、繁琐和昂贵的抽象 JS 引擎(参见多年前关于该主题的原始讨论)。

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

    免责声明

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


    是否可以与 WebView 分开使用,就像 JSR 223 引擎一样?

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

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

    【讨论】:

      【解决方案2】:

      更新

      由于OP比较关心JavaFX WebView,所以使用JavaScriptCore。请阅读JewelSea's answer 以获得更好的理解。

      JavaFX Webkit 不使用 Nashorn,它使用 JavaScriptCore

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

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

      您可以在Oracle Site 上找到有关 Nashorn 的更多信息。

      【讨论】:

      • 你确定要使用 webkit 吗?它是一个原生组件,所以它可能使用自己的 v8
      • Java 8 中的 WebVIew 不使用 Nashorn,也不使用 V8。
      • 请看这个答案,它更深入地了解哪些 Java 版本有哪些引擎:stackoverflow.com/a/62330502/3196753
      猜你喜欢
      • 2019-04-07
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      相关资源
      最近更新 更多