“special break point”
似乎只是直接传递java.lang.Strings。
我正在沙箱化JavaScript(根据http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/),因此Context.javaToJS
在JavaScript中无法使用,除非我在java.lang.String
(我宁愿不做)中打洞。
我错过了一些明显的东西吗?
答案 0 :(得分:1)
试试这个:
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)"));