如标题所述,我想要实现的目标如下:
- 创建java对象
- 将其传递给 JavaScript
- 对传递的对象调用方法(例如 setter)
- 继续使用 java 中的对象
我正在使用java中包含的脚本。 如果有人能帮助我解决这个问题,我会很高兴。
最佳答案
如果您使用 ScriptEngine 框架,这非常简单。您可以通过两种方式将 Java 对象“传递”给 JavaScript:
- 您可以为 JavaScript 代码“播种”执行环境,并将 Java 对象安排在全局命名空间的“那里”
- 您可以将 Java 对象作为参数传递给 JavaScript 函数。
如果需要,您还可以从 JavaScript 访问 Java 构造函数并实例化 Java 对象。
要做第一件事,您必须为脚本引擎设置“绑定(bind)”。它就像一张 map :
final Bindings globals = engine.createBindings();
globals.put("foo", yourObject);
现在,当 JavaScript 代码在该引擎中运行时,全局符号“foo”将用作对 Java 对象的引用。您可以绑定(bind)任意数量的引用。
如果您想将 Java 对象作为参数传递给 JavaScript 函数,您首先需要的是一种调用 JavaScript 函数的方法。为此,您可以使用“Invocable”接口(interface)公开的“invokeFunction”或“invokeMethod”方法:
final Object result = ((Invocable) engine).invokeMethod(context, methodName, arg, arg, ... );
那里的“上下文”只是对您希望 this
在调用的函数中引用的内容的引用。 “methodName”只是一个字符串,给出全局 JavaScript 函数的名称。
Java 类可通过其完全限定路径名供 JavaScript 环境使用:
var javaHashMap = new java.util.HashMap();
这将为您提供一个作为 JavaScript 变量的 Java HashMap 实例。
关于java - 如何从 javascript 调用 java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4829347/