JavaFX WebView加载本地Javascript文件

Ben*_*ale 8 webview javafx-2

我正在试验JavaFX WebView控件,我想使用MathJax Javascript库来呈现数学内容.

作为测试,我创建了一个基本的JavaFX FXML项目,WebView在FXML中添加了一个并更新了控制器代码,如下所示:

public class SampleController implements Initializable {

    @FXML
    private WebView webView;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        webView.getEngine().load(
            "file:///Users/benjamin/Desktop/Page.html");
    }
}
Run Code Online (Sandbox Code Playgroud)

html文件如下所示:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <script type="text/x-mathjax-config">
            MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
        </script>
        <script type="text/javascript"
                src="/Users/benjamin/Downloads/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
        </script>
    </head>
    <body>
        When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are
        $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这按预期工作并产生以下结果:

在此输入图像描述

请注意,对于测试,html和JavaScript文件路径都硬编码到我的硬盘驱动器上的位置,因此下一步是将html打包为与应用程序捆绑在一起的资源,以便它不会查找本地文件.

我更新了控制器代码以查找这样的页面(html尚未更改).

@Override
public void initialize(URL url, ResourceBundle rb) {
    webView.getEngine().load(
        this.getClass().getResource("Page.html").toExternalForm());
}
Run Code Online (Sandbox Code Playgroud)

但这会产生以下结果:

在此输入图像描述

如您所见,数学内容不再呈现.

如果我更改html <script>标记以引用CDN中的JavaScript,那么一切都像原始示例中那样工作但我希望能够引用本地JavaScript文件(并最终引用与应用程序捆绑在一起的版本).

我正在努力实现的目标是什么?

Ulu*_*Biy 8

将MathJax.js文件添加到Page.html的同一个包/文件夹中,然后引用它

<script type="text/javascript"
        src="MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
Run Code Online (Sandbox Code Playgroud)