【发布时间】:2021-05-15 17:44:45
【问题描述】:
在实际加载 html 文件之前,我需要从 JavaFX WebEngine 初始化 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>
对于 JavaFX 部分:
@Override
public void start(Stage primaryStage) throws InterruptedException {
WebView webview = new WebView();
WebEngine webengine=webview.getEngine();
// Set var a before webengine.load
webengine.load(getClass().getResource("hello.html").toString());
Pane p = new Pane();
p.getChildren().add(webview);
Scene scene = new Scene(p);
primaryStage.setScene(scene);
primaryStage.show();
}
我试过不放 onload='f();'在.html的body标签中,然后我尝试像这样从Java中一一调用JavaScript函数:
webengine.load(getClass().getResource("hello.html").toString());
webengine.executeScript("setA(123)");
webengine.executeScript("f()");
但这不起作用(我得到 ReferenceError: Can't find variable setA/f )。
任何潜在的解决方案?
【问题讨论】:
-
你的目标到底是什么?据我了解,您需要在加载 html 之前初始化一些状态。您可以做的是首先使用模板库(如 Freemarker)生成 html 文件。这样您可以预先设置状态,然后在 JavaFX 中加载(现在是有状态的)生成的 html 文件。
-
我其实想过做类似的事情,但我认为有更简单的方法。确切地说,我正在使用 Bing Maps JavaScript API,并且我想加载以我在执行 JavaFX 程序期间获得的一些坐标为中心的地图。我有使用预定义坐标加载地图的 JavaScript 函数,我需要在页面加载之前设置这些坐标。我基本上没有使用 JavaScript 的经验,所以如果我的问题在任何方面都不够充分,我很抱歉。感谢您的回复@BillTsagkas
-
在
webengine.load()方法之后是否立即执行脚本?您是否尝试在页面加载后执行它们? (通过在webengine的负载工作人员上使用ChangeListener) - 检查文档中的example。我尝试通过执行页面 load 上的脚本来执行您的代码。所需的结果显示在页面 render 上。您可以尝试一下并返回结果吗? -
我之前尝试过这种方法,但没有成功(天知道是什么原因),但我现在又试了一次,效果很好。非常感谢@BillTsagkas!
标签: javascript javafx javafx-webengine