javafx中使用了什么javascript引擎?

WebView内置了javascript引擎。 它用的是什么引擎? openjdk和oracle jdk是一样的吗? 可以单独使用WebView,就像JSR 223引擎一样吗?

Oracle JRE中的JavaScript运行时

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

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

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

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

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

背景来源信息

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

好…。 它是这样的。 WebKit默认带有JavaScriptCore,这是我们使用的JS引擎。 非常好。 我的理解是JavaScriptCore(又名SquirrelFish aka Nitro) 与Safari使用的JS引擎相同 。 当Chrome和Apple都是WebKit的一部分时,谷歌放入WebKit的一个抽象层就是能够交换JavaScript引擎。 当Google将WebKit分解为Blink时,WebKit项目需要对不同的JS VM进行抽象消失。 因此,WebKit的人一直在谈论删除那些抽象,以至于你将无法换掉JS引擎 ,[ 进一步的信息 ]。 如果/当发生这种情况时,我们很难(或不可能)切换到Nashorn for WebView。 我们不打算使用WebKit,所以我们必须遵循WebKit的function。

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

此外,我们只会在WebKit2中支持JSC,所以我认为任何事情都不能说服我至少保持对多个JS引擎的支持对项目有利。“ – Oliver Hunt

放弃

这个答案仅与Oracle Java 8版本有关; 备用和未来的JavaFX和Java实现可能有不同的内部实现。


可以单独使用WebView,就像JSR 223引擎一样吗?

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

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

更新

由于OP更关注JavaFX WebView,因此它使用JavaScriptCore 。 请阅读JewelSea的答案,以便更好地理解。

JavaFX Webkit不使用Nashorn,它使用JavaScriptCore

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

是的,Oracle JDK和OpenJDK也是如此。

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