使用JSObject从Java调用Javascript函数

3
我只是想使用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]);
}
3个回答

1
在你的示例中,你应该会看到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 });

1

我发现你在Java中使用了一个对象数组并传入字符串值。你尝试过使用字符串数组吗?

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

试一下,看看是否有效。我猜测 JavaScript 无法意识到传递的对象数组是字符串数组,但我不确定。


如果我在我的Javascript中这样做,它就能工作:var args = Array.prototype.slice.call(arguments);我猜我需要以特殊的方式解析参数。而且这个函数不接受任何参数! - Marquinio

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接