有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用webEngine事件的JavaScriptJavaNashorn

我正在尝试处理纳肖恩一个网络引擎中的事件。下面的代码不会打印任何内容,也不会以任何其他方式指示“加载”事件或来自webEngine的任何其他事件正在触发任何内容

#!/usr/bin/jjs -fx
engine = (v=new(s=javafx.scene).web.WebView).engine
content_dir = __DIR__.replace('./','html/');
page = 'file://' + content_dir + 'index.html';
engine.onAction = function(){print("page loaded");};
engine.load(page);
$STAGE.scene=new s.Scene(v);

本例中的页面加载很好。我只是无法从引擎中获取任何事件。我已经检查了Java是如何实现的,但是根据Nashorn中的文档,您只需要如上所述设置onAction。所以我很困惑


共 (1) 个答案

  1. # 1 楼答案

    WebEngine(https://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebEngine.html)类型的WebView的“引擎”属性。该类没有名为“setOnAction”的bean样式方法。只有setOnAlert,当WebView的JavaScript引擎评估JS“alert”调用时会调用它。因此,您的属性集“onAction”被忽略[设置Java对象的不存在属性]。您必须使用“loadWorker”状态来跟踪WebView JS引擎中的加载事件

    您可能希望查看WebView的JS引擎和nashorn JS引擎之间交互的示例代码:

    http://hg.openjdk.java.net/jdk9/dev/nashorn/file/e4283eeb182c/samples/browser_dom.js