如何创建一个JavaScript包装与JavaFx WebView使用?JSNI是一种选择吗?
How to create a JavaScript wrapper to be used with JavaFx WebView? Is JSNI an option?
我想将JavaFx WebEngine与JavaScript库d3.js结合使用。我已经能够从Java中访问JavaScript库。它使用jsoobjects工作,如[1]:
所示JSObject d3Object = (JSObject) webEngine.executeScript("d3");
JSObject chart= (JSObject) d3Object.call("select", ".chart");
正如你所看到的,有一个通用的方法"call",我必须传递我想要调用的JavaScript方法的名称作为字符串。为了更舒适地使用JavaScript库d3.js,我想为它提供一个Java包装器,例如
JSObject d3Object = (JSObject) webEngine.executeScript("d3");
D3Wrapper d3 = new D3Wrapper(d3Object);
Selection chart = d3.select(".chart");
创建这样一个JavaScript包装器的推荐方法是什么?我发现已经有一个针对GWT应用程序的D3包装器。d3对象的主要包装器位于这里:
https://github.com/gwtd3/gwt-d3/blob/master/gwt-d3-api/src/main/java/com/github/gwtd3/api/D3.java它似乎是基于JSNI[2],一个示例方法定义是
public static final native Selection select(String selector)/*-{
return $wnd.d3.select(selector);
}-*/;
注释中的本机代码将在从Java内部调用该方法时执行。如何利用JavaFx桌面应用程序中现有的包装器代码?我以前从未使用过GWT,也不想运行额外的web服务器。我真的需要深入研究GWT并在JavaFx WebEngine中运行完整的GWT应用程序吗(如果可能的话)?或者我可以只使用GWT的JSNI部分与JavaFx WebEngine一起使用吗?
这是一篇关于GWT调试模式的文章,它看起来相当复杂:http://www.quora.com/How-does-GWT-live-javascript-debugging-in-Eclipse-work-and-how-could-it-be-applied-to-Clojure所以恐怕没有简单的方法将WebEngine插入到这样的工作流程中?我真的需要手动重写每个包装类"已经由gwt-d3提供"吗?如果本机JavaScript代码由注解提供,我可以重用gwt-d3中的包装器类,并通过反射处理它们。
如果将JSNI与JavaFx结合没有任何意义,那么为d3.js编写自己的包装器的优雅方式是什么?是否有Java库可以帮助我编写JavaScript包装器?
结果证明JSNI不是(可行的)选项。我决定从gwt-d3的现有包装器代码开始,并将其转换为搜索和替换操作……做一些手动微调。这样它就不再适用于GWT,而是适用于JavaFx。我将为转换后的代码创建一个新的GitHub项目。
我的包装器类继承了一个抽象基类JavaScriptObject,它与JavaFx WebEngine对话并处理JSObject操作。与gwt-d3作者的相关讨论可以在这里找到:https://github.com/gwtd3/gwt-d3/issues/124
编辑
我刚刚创建了一个新的GitHub项目: https://github.com/stefaneidelloth/javafx-d3请随时加入并帮助修复剩余的错误。
- 下拉选择可自动更改第二个下拉选择
- 如何使用jQuery选择下拉列表的值
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 按照选项卡索引的顺序循环一个jQuery选择
- 在动态创建的元素上获取对特定选择器的引用
- AngularJS-在JSON选择器中使用变量名
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 获取选择框的状态
- d3基于用户选择动态更新节点
- 提交后保留下拉选择的值
- JQuery对动态创建的对象进行选择
- 无法在Ionic select中预先选择最后一个选项
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- jQuery自动完成阻止选择后聚焦
- 使用此选项选择父类内部的类
- jQuery最近父级的数据属性选择器
- JSNI (GWT-GWTP):jQuery在就绪事件触发后不会在“文档就绪”函数中选择节点
- 如何创建一个JavaScript包装与JavaFx WebView使用?JSNI是一种选择吗?