2010-09-02 47 views
2

我只是想使用JSObject从Java调用Javascript函数。我需要Javascript函数来更新HTML文本字段。为此,我需要知道元素ID和值。使用JSObject从Java调用Javascript函数

我试过这个,但它不起作用。当试图从Javascript访问传递的值是空的。

所以我的问题是我如何从Javascript访问这些值?我肯定错过了什么。

如果我声明大小为1的对象,它将工作,但我需要在对象数组中传递2个值。

在此先感谢。

//Java code 
Object[] objects = new Object[2]; 
objects[0] = "elementId"; 
objects[1] = "elementValue"; 
window.call("updateElement",objects); 

//Javascript code 
function updateElement(array){ 
    alert(array[0]); 
    alert(array[1]); 
} 

回答

1

所以我注意到你在java中使用Object数组并传入字符串值。 您是否尝试过使用字符串数组?

String[] x = new String[2]; 
x[0] = "elementId"; 
x[1] = "elementValue"; 
window.call("updateElement", x); 

给一个尝试,看看是否有效。我的猜测是,JavaScript不能够实现被传递的对象数组是一个字符串数组。虽然我不是100%肯定的。

+0

如果我这样做,在我的JavaScript它的工作原理: VAR args = Array.prototype.slice.call(arguments); 我想我需要用特殊的方式解析参数。这个函数不需要任何参数! – Marquinio 2010-09-03 13:41:56

0

调用方式的工作方式是通过函数参数的数组。在这里,你只有一个参数(你的阵列),所以你需要调用它像:

//Java code 
Object[][] objects = new Object[][1]; 
objects[0]=new Object[2]; 
objects[0][0] = "elementId"; 
objects[0][1] = "elementValue"; 
window.call("updateElement",objects); 
0

在你的榜样,你应该看到alert('e')alert('l')显示出来,因为你传递两个参数“updateElement” 。您始终可以使用javascript中的arguments对象来检查您真正收到的内容。

我建议总是单独和最后创建最终参数列表,所以你没有这个问题。这只是一个可怕的设计缺陷,他们没有将签名更新到Java 5中的JSObject.call(String, Object...),这样我们就不会那么头痛。

一个清洁的解决办法是:

// Java code 
window.call("updateElement", new Object[] { "elementId", "elementValue" }); 

// Javascript code 
function updateElement(elId, elVal){ 
    alert(elId); 
    alert(elVal); 
} 

但如果你真的要坚持在JS接受一个数组:

String[] arr = new String[] { "elementId", "elementValue" }; 
window.call("updateElement", new Object[] { arr });