1

我正在使用具有 Mozilla Rhino 提供的嵌入式 JS 脚本环境的第三方应用程序。

所以不幸的是,这意味着我无法访问 Java 源代码或 Rhino 在此产品中配置/嵌入的方式。

考虑到这一点,我的目标是在全局上下文/范围内执行任意数量的其他编码 JS,使用 JS 并且使用JS。这就是我所在的位置(注意,这个例子有点做作,但请耐心等待):

var engine = new Packages.javax.script.ScriptEngineManager().getEngineByName("javascript");
engine = Packages.javax.script.Invocable(engine);

这就是我所在的地方。所以,我知道我可以这样做:

engine.eval("var myVar = \"Hello World!\";");
engine.get("myVar");
=> "Hello World!"

但我想要的是好像 eval 以某种方式在“当前”全局上下文/范围内执行了编码字符串。即这样我就可以做到这一点:

engine.eval("var myVar = \"Hello World!\";");
myVar
=> "Hello World!"

期望行为的另一个示例:

engine.eval("function sayHello(){ return \"Hello Again!\";}var a = \"Apple\";");
sayHello();
=> "Hello Again!"
a
=> "Apple"

我注意到有一些重载的 eval 方法可能有用:

class java.lang.Object eval(java.lang.String,javax.script.Bindings)
class java.lang.Object eval(java.lang.String,javax.script.ScriptContext)

然而,我的扩展实验还没有取得任何成功。

任何想法和想法都非常感谢......

4

0 回答 0