我正在使用具有 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)
然而,我的扩展实验还没有取得任何成功。
任何想法和想法都非常感谢......