加载前从JavaFX调用JavaScript函数



在实际加载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的正文标签,然后我试着从Java调用JavaScript函数一个接一个,像这样:

webengine.load(getClass().getResource("hello.html").toString());
webengine.executeScript("setA(123)");
webengine.executeScript("f()");

但这不起作用(我得到ReferenceError: Can't find variable setA/f)。

有可能的解决方案吗?

你想在浏览器"之前执行一些js程序开始处理HTML内容…

简短的回答…你不能这么做。

长答案……你可以这样做,但是你需要使用本地修改的jdk版本,在这个版本中你可以修改隐藏的组件,比如WebEngine使用的web组件……或者使用反射绕过运行时访问策略…但即便如此,它也会带来很多麻烦,你不能保证它会像你期望的那样工作。

最新更新