【问题标题】:Java Nashorn using webEngine eventsJava Nashorn 使用 webEngine 事件
【发布时间】:2015-10-09 18:43:51
【问题描述】:

我正在尝试处理来自 Nashorn 的 webEngine 的事件。以下代码不打印任何内容或以任何其他方式指示来自 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。所以我很困惑。

【问题讨论】:

    标签: javascript java nashorn


    【解决方案1】:

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

    你可能想看看这个 WebView 的 JS 引擎和 nashorn JS 引擎之间交互的示例代码:

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

    【讨论】:

    • 谢谢。我让它工作了。现在尝试在环境之间进行某种消息传递,但这是一个单独的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2015-03-03
    相关资源
    最近更新 更多