1

我正在使用一些带有 JAVA FX 11 的绘图工具创建一个 Web 浏览 exp,但是在尝试加载具有letconst使用这些变量的 javascript 代码时,它们只是被忽略并抛出异常。我正在使用 maven 3.8.0、Java 1.8 和 JavaFX 11。

代码如下:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>12-ea+9</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-web</artifactId>
    <version>12-ea+9</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-swing</artifactId>
    <version>12-ea+9</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>12-ea+9</version>
</dependency>

和 Java 代码

public static void main(String[] urls) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        System.out.println(javaVersion + " java....... fx........ " + javafxVersion);
        Application.launch(urls);
    }

    @Override
    public void start(Stage stage) throws Exception {
        Parameters parameters = getParameters();
        List<String> raw = parameters.getRaw();
        String url = "http://example.com/";
        if (raw.size() != 0) {
            url = raw.get(0);
        }
        /*
         * WebConsoleListener.setDefaultListener((webView, message, lineNumber,
         * sourceId) -> { System.out.println(message + "[at " + lineNumber + "] [in " +
         * sourceId + "]"); });
         */
        Pane root = new Pane();

        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();

        // Load the Google web page
        webEngine.load(url);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.setTitle("IWB");
        stage.show();

        // mainStage = stage;
        root.getChildren().add(webView);
        webView.setMinSize((screenSize.getWidth() - 120), (screenSize.getHeight() - 60));
        btns.setMinHeight(screenSize.getHeight() - 60);

        stage.setOnCloseRequest(e -> {
            // Platform.exit();
            // System.exit(0);
        });
        // Platform.setImplicitExit(false);
    }
4

1 回答 1

1

我正在使用 maven 3.8.0、Java 1.8 和 JavaFX 11。

简而言之,使用最新的 Java 8。Java 似乎正在更新该版本的 WebKit,因此更新的版本将产生更新的功能。8u5阅读下面的细分,特别是和之间的区别8u251

开放JDK 11

  • JavaFX 11.0.2:WebKit 版本606.1(Safari 12.x
  • JavaFX 15-ea+3:WebKit 版本609.1(Safari 13.x
    • 注意:尽管名称如此,JavaFX 15 与 JDK11 兼容

甲骨文Java 8

  • Java 8u5:WebKit 版本537.44(Safari 7.x
  • Java 8u251:WebKit 版本609.1(Safari 13.x )

一些有用的信息:

  • Oracle Java 1.8 带有自己的捆绑 Java FX 版本,通常不能被覆盖。要使用 Java FX11,您需要使用 Java 11 运行项目并将 System 属性设置java.library.path为 FX 框架的位置。
  • 使用https://stackoverflow.com/a/23228558/3196753web.getEngine().getUserAgent()的技术获得的版本
  • 假设 WebKit ~= Safari。自 Safari 10 起,Safari就支持 ECMAScript 6
  • 警告:使用 Oracle 的 Java 存在严重的商业许可问题。更多关于这里的信息:Java 仍然免费 2.0.3。如果此许可证导致您的应用出现问题,建议使用 OpenJDK 11。本文提供了几个没有这些商业许可限制的提供程序。
于 2020-06-11T17:51:02.197 回答