从 javafx 中的 java 脚本调用 java 方法
call a java method from javascript in javafx
我有一个 javafx 应用程序。最初它使用 WebView 加载登录页面。登录页面采用用户名并重定向到另一个页面。在这个 html 页面中,我在 java 脚本中有一个函数。我想在执行脚本时调用 java 方法。但我最终收到一条错误消息
ReferenceError: Can't find variable: OpenDoc[at 17]
这是我的html
html>
<body onload="login()">
<div id="jnlpStart_EN">
<H2>Welcome to Home Page</H2>
</div>
</body>
<script type="text/javascript">
function login() {
OpenDoc.passDocId('q56wre');
}
</script>
</html>
这是我的java代码
public class WebEngineTest1 extends Application {
@Override
public void start(Stage primaryStage) {
WebConsoleListener.setDefaultListener((webView, message, lineNumber, sourceId) -> {
System.out.println(message + "[at " + lineNumber + "]");
});
WebView webView = new WebView();
WebEngine engine = webView.getEngine();
engine.load("http://localhost:8001/app/login");
engine.locationProperty().addListener((obs, oldLocation, newLocation) -> {
if (newLocation != null && newLocation.endsWith("/home")) {
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("OpenDoc", new OpenDoc());
}
});
Scene scene = new Scene(webView, 300, 150);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
public class OpenDoc {
public void passDocId(String id) {
System.out.println(id);
}
}
}
首先,您必须在 WebEngine
上启用 JavaScript
webEngine.setJavaScriptEnabled(true);
这条线就可以解决问题
webengine.executeScript("initOpenDoc(\"ID\")");
我找到了答案。
因为登录后它重定向到 URL。我必须使用 documentProperty() 添加一个监听器。我在里面添加了从 java 脚本调用 java 方法的代码。因此,在加载页面时,我没有收到 ReferenceError: Can't find variable: OpenDoc[at 17]
消息,因为我已经添加了引用。这是代码
engine.documentProperty().addListener((v, o, n) -> {
String newLocation = webEngine.getLocation();
if (newLocation != null && newLocation.endsWith("/home")) {
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("OpenDoc", new OpenDoc());
}
});
我有一个 javafx 应用程序。最初它使用 WebView 加载登录页面。登录页面采用用户名并重定向到另一个页面。在这个 html 页面中,我在 java 脚本中有一个函数。我想在执行脚本时调用 java 方法。但我最终收到一条错误消息
ReferenceError: Can't find variable: OpenDoc[at 17]
这是我的html
html>
<body onload="login()">
<div id="jnlpStart_EN">
<H2>Welcome to Home Page</H2>
</div>
</body>
<script type="text/javascript">
function login() {
OpenDoc.passDocId('q56wre');
}
</script>
</html>
这是我的java代码
public class WebEngineTest1 extends Application {
@Override
public void start(Stage primaryStage) {
WebConsoleListener.setDefaultListener((webView, message, lineNumber, sourceId) -> {
System.out.println(message + "[at " + lineNumber + "]");
});
WebView webView = new WebView();
WebEngine engine = webView.getEngine();
engine.load("http://localhost:8001/app/login");
engine.locationProperty().addListener((obs, oldLocation, newLocation) -> {
if (newLocation != null && newLocation.endsWith("/home")) {
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("OpenDoc", new OpenDoc());
}
});
Scene scene = new Scene(webView, 300, 150);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
public class OpenDoc {
public void passDocId(String id) {
System.out.println(id);
}
}
}
首先,您必须在 WebEngine
webEngine.setJavaScriptEnabled(true);
这条线就可以解决问题
webengine.executeScript("initOpenDoc(\"ID\")");
我找到了答案。
因为登录后它重定向到 URL。我必须使用 documentProperty() 添加一个监听器。我在里面添加了从 java 脚本调用 java 方法的代码。因此,在加载页面时,我没有收到 ReferenceError: Can't find variable: OpenDoc[at 17]
消息,因为我已经添加了引用。这是代码
engine.documentProperty().addListener((v, o, n) -> {
String newLocation = webEngine.getLocation();
if (newLocation != null && newLocation.endsWith("/home")) {
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("OpenDoc", new OpenDoc());
}
});