【发布时间】:2017-02-08 21:12:45
【问题描述】:
我正在使用 Rhino 将 JS 代码嵌入到 Java (android) 应用程序中。我需要一个用 Java 编写的函数来返回一个 Java 函数,以便稍后由 Javascript 调用。为了保持与 iOS 实现的兼容性,这需要存储并保存在一个 JS 函数变量中。我不知道如何从 Javascript 返回一个被视为 JS 函数的 Java 对象。我认为这个问题的答案是创建一个 NativeJavaMethod,但是当我尝试在 Javascript 中调用一个时,它总是说“this”指针是错误的。我使用的代码是:
NativeJavaMethod("", runnable.getClass().getMethod("run"), scope);
其中 runnable 是 Runnable,scope 是顶级范围。必须有办法做到这一点,我做错了什么?我猜它的范围,但我不知道它想要什么。
确切消息:org.mozilla.javascript.EvaluatorException: Java method "run" was invoked with [object Object] as "this" value that can not be converted to Java type java.lang.Runnable. (#1)
(我什至还尝试将 runnable 写入 JS 变量,然后将 runnable.run 存储在变量中并从 Java 中获取返回。同样的问题。)
编辑:
NativeJavaMethod 从 Java 函数返回给调用者(用 JavaScript 编写),存储在变量中,然后执行。所以在 JS 中
var x=myobject.makeFunction(); //makeFunction is in Java, is properly called and returns the NativeJavaMethod
x(); //This throws the above exception
【问题讨论】:
-
我正在返回它(这个函数本身是从 Javascript 调用的)将它存储在一个 JS 变量中,然后调用那个变量。所以 var x=SomeJavaMethodThatReturnsNativeObject(); X();在 JS 中
标签: javascript java rhino