java - 如何从 javascript 调用 java 方法

标签 java javascript rhino

如标题所述,我想要实现的目标如下:

  1. 创建java对象
  2. 将其传递给 JavaScript
  3. 对传递的对象调用方法(例如 setter)
  4. 继续使用 java 中的对象

我正在使用java中包含的脚本。 如果有人能帮助我解决这个问题,我会很高兴。

最佳答案

如果您使用 ScriptEngine 框架,这非常简单。您可以通过两种方式将 Java 对象“传递”给 JavaScript:

  1. 您可以为 JavaScript 代码“播种”执行环境,并将 Java 对象安排在全局命名空间的“那里”
  2. 您可以将 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/

相关文章:

java - 将网站内容读入字符串

java - 使用 Rhino 从评估的 JS 中获取函数名称及其参数

javascript - Rhino load() 函数在 javax.script 提供的 JavaScript 中可用吗?

java - 如何检测正在编译我的java源文件的编译器的版本

java - 任务队列任务中的单元测试请求超时

javascript - 在继续循环之前让 SetTimeout 完成

javascript - 如何使每个 `<li>` 具有不同的背景颜色?

java - 我可以强制消除 Rhino 调用的重载方法的歧义吗?

java - Sprint 无线工具包 3.3.2 与 Sun 无线工具包

javascript - 如何使用 ng2-dragula 拖放到多个 Angular2 组件