我认为JxBrowser 6.1中的JavaScript Java Bridge API存在问题。我尝试了一个非常简单的代码来调用Javascript中的java类的方法。这里是代码。在java中,java
被设置为javascript window
对象的属性,该对象为Events
类的实例,然后加载html。在html中,我只需要拨打Events
类的Close
方法即可。但是,当我点击Close
按钮,JAVA Close
功能不会被调用,并从JxBrowser控制台有一条消息说:JxBrowser 6.1 JavaScript Java Bridge API不起作用
遗漏的类型错误:无法读取属性未定义
“关闭”,这意味着即window
对象的java
属性未定义。
Main.java:
public class Main extends Application {
private Browser browser;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Platform.setImplicitExit(false);
browser = new Browser();
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty("java", new Events());
BrowserView browserView = new BrowserView(browser);
StackPane pane = new StackPane();
pane.getChildren().add(browserView);
Scene scene = new Scene(pane, 330, 470);
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.setScene(scene);
primaryStage.show();
browser.loadURL(Main.class.getResource("templates/simple.html").toExternalForm());
}
}
class Events {
public void Close() {
System.out.println("close button clicked");
}
}
simple.html:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<button id="Close">Close</button>
<script>
document.getElementById('Close').onclick = function() {
window.java.Close();
}
</script>
</body>
</html>
这里是我用来做这个的文章: https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013062-calling-java-from-javascript
请更正我如果我错了。 在此先感谢。
谢谢,我这样做了,它解决了这个问题一些如何,但有另一种错误说:'未捕获IllegalAccessException:类com.teamdev.jxbrowser.chromium.JSContext不能访问类RezRem成员使用修饰符“public”“'的事件。为了这个错误,我在'public'修饰符的另一个文件中声明了'Events'类,现在没有问题。 –
JavaScript只能访问公共类和方法。 //jxbrowser.support.teamdev.com/solution/articles/9000013062-calling-java-from-javascript – Vladimir
最近添加注释,谢谢;) –