我只是尝试使用JSObject从Java调用Javascript函数。我需要Javascript函数来更新HTML文本字段。为此,我需要知道元素ID和值。
我试过这个,但它不起作用。尝试从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]);
}
答案 0 :(得分:1)
所以我注意到你在java中使用Object数组并传入字符串值。 你尝试过使用String数组吗?
String[] x = new String[2];
x[0] = "elementId";
x[1] = "elementValue";
window.call("updateElement", x);
尝试一下,看看是否有效。我的猜测是,javascript无法实现传递的对象数组是一个字符串数组。虽然我不是百分百肯定。
答案 1 :(得分: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);
答案 2 :(得分: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 });