从java端访问javascript方法
我有一个javascript资源,并应用Rhino脚本引擎从java端调用一个方法
(function( global ){
var Result;
(Result = function( val ) {
this.tpl = val || '' ;
}).prototype = {
get: function ()
{
return this.tpl ;
}
};
} ( window ) ) ;
我在java端就是这样做的,我如何在上面的脚本中调用get方法
@Test
public void testCallJSMethod() throws Exception {
String jsResource = getJSResource();
jsEngine.put("window", "window");
jsEngine.put("window.Result", "Result");
jsEngine.eval(jsResource);
Invocable inv = (Invocable) jsEngine;
Object obj = jsEngine.get("window.Result");
assertEquals(true, obj != null);
//try to call get method in above script, but it doesn't work
inv.invokeMethod(obj, "get", new Object[] {} );
}
# 1 楼答案
我发现你的代码有几个问题:
这并没有将窗口定义为JavaScript对象。你可以这样做:
在javascript中,Result是一个局部变量,它在调用外部函数后将无法存活。您应该将您的功能分配给全局。结果:
jsEngine。get(name)获取变量的值。如果你想要窗口的值。结果,您必须执行jsEngine。eval(“window.Result”),而不是jsEngine。获取(“window.Result”)
但是窗户。结果实际上是一个函数。实际上是一个构造函数。因此,要创建实例,必须执行以下操作:jsEngine。eval(“new window.Result('Hello world!!!'))
因此,您的java函数将成为:
# 2 楼答案
一种可能的解决方法是将结果存储在脚本变量中,并使用 jsEngine。获取(“我的结果”)