Context.javaToJS
似乎只是直接传递 java.lang.Strings 。
我正在对 JavaScript 进行沙箱处理(根据 http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/ ),因此 java.lang.String
在 JavaScript 中不可用,除非我在 ClassShutter
中打洞(我宁愿不做)。
我是否遗漏了一些明显的东西?
最佳答案
试试这个:
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
ScriptContext context = engine.getContext();
context.setAttribute("jsString", "I am Java String", ScriptContext.ENGINE_SCOPE);
context.setAttribute("jsBoolean", true, ScriptContext.ENGINE_SCOPE);
context.setAttribute("jsNumber", 123456, ScriptContext.ENGINE_SCOPE);
engine.eval("function getValueAndType(obj){return obj + ' - ' + typeof obj;}");
Assert.assertEquals("Something wen wrong", "I am Java String - string", engine.eval("getValueAndType(jsString)"));
Assert.assertEquals("Something wen wrong", "true - boolean", engine.eval("getValueAndType(jsBoolean)"));
Assert.assertEquals("Something wen wrong", "123456 - number", engine.eval("getValueAndType(jsNumber)"));
关于javascript - Rhino 将 java.lang.String 转换为 JavaScript 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31448011/