我正在使用具有Mozilla Rhino提供的嵌入式JS脚本环境的第三方应用程序。
所以不幸的是,这意味着我无法访问Java源,或者意味着在此产品中配置/嵌入了Rhino。
考虑到这一点,我的目标是使用JS和 only 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)
然而,我的扩展实验尚未取得任何成功。
非常感谢任何想法和想法...