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]);
}
4

3 回答 3

1

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

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

试一试,看看是否可行。我的猜测是javascript无法意识到传递的对象数组是一个字符串数组。虽然我不是 100% 确定。

于 2010-09-02T14:29:34.993 回答
1

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

我建议始终分别最后创建最终参数列表,这样您就不会有这个问题。这只是一个可怕的设计缺陷,他们没有JSObject.call(String, Object...)在 Java 5 中更新签名,这样我们就不会那么头疼了。

更清洁的解决方案是:

// 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 });
于 2015-06-30T11:53:46.170 回答
0

call 的工作方式是传入一个函数参数数组。这里你只有一个参数(你的数组),所以你需要这样称呼它:

//Java code
Object[][] objects = new Object[][1];
objects[0]=new Object[2];
objects[0][0] = "elementId";
objects[0][1] = "elementValue";
window.call("updateElement",objects);
于 2012-06-06T14:40:27.143 回答