加载前从JavaFX调用JavaScript函数

加载前从JavaFX调用JavaScript函数,javascript,javafx,javafx-webengine,Javascript,Javafx,Javafx Webengine,在实际加载html文件之前,我需要从JavaFXWebEngine初始化JavaScript中的一些变量。我的.html文件如下所示: <!DOCTYPE html> <html> <head> <script type='text/javascript'> var a; function setA(aa) { a = aa; } function f(

在实际加载html文件之前,我需要从JavaFXWebEngine初始化JavaScript中的一些变量。我的.html文件如下所示:

<!DOCTYPE html>
<html>
<head>
    <script type='text/javascript'>
        var a;
        function setA(aa) {
            a = aa;
        }
        function f() {
            <!-- ... some operation with var a-->
        }
    </script>
</head>
<body onload='f();'>
    <!-- ... -->
</body>
</html>
webengine.load(getClass().getResource("hello.html").toString());
webengine.executeScript("setA(123)");
webengine.executeScript("f()");
我试着不装上船在.html的body标记中,然后我尝试从Java中逐个调用JavaScript函数,如下所示:

<!DOCTYPE html>
<html>
<head>
    <script type='text/javascript'>
        var a;
        function setA(aa) {
            a = aa;
        }
        function f() {
            <!-- ... some operation with var a-->
        }
    </script>
</head>
<body onload='f();'>
    <!-- ... -->
</body>
</html>
webengine.load(getClass().getResource("hello.html").toString());
webengine.executeScript("setA(123)");
webengine.executeScript("f()");
但这不起作用,我得到引用错误:找不到变量setA/f


有什么可能的解决方案吗?

所以你想在浏览器开始处理html内容之前执行一些js内容

简短的回答。。。你不能真的那样做


长长的回答。。。实际上,您可以这样做,但您需要使用本地修改的jdk版本,在该版本中,您可以修改隐藏的组件,例如WebPage,它是WebEngine使用的组件。。。或者使用反射绕过运行时访问策略。。。但即便如此,它也会打开一罐蠕虫,你无法保证它会按你期望的方式工作。

你的目标到底是什么?据我所知,在加载html之前,您需要初始化一些状态。您可以首先使用Freemarker之类的模板库生成html文件。通过这种方式,您可以预先设置状态,然后在JavaFX中加载现在有状态生成的html文件。确切地说,我使用的是Bing Maps JavaScript API,我希望加载以JavaFX程序执行期间获得的一些坐标为中心的地图。我有一个JavaScript函数,用预定义的坐标加载地图,我需要在页面加载之前设置这些坐标。我基本上没有使用JavaScript的经验,所以如果我的问题在任何方面都不充分,我很抱歉。感谢您的回复@billtsagkas您是否在webengine.load方法之后立即执行脚本?您是否尝试在页面加载后执行它们?通过在webengine的load worker-Check-in文档上使用ChangeListener。我试着以这种方式执行代码,在页面加载时执行脚本。所需结果显示在页面呈现上。你能试一下,然后得出结果吗?我以前试过这种方法,但不知是什么原因导致它不起作用,但我现在又试了一次,效果非常好。非常感谢@BillTsagkas!