【问题标题】:Calling Javascript function from Java using JSObject使用 JSObject 从 Java 调用 Javascript 函数
【发布时间】:2011-04-07 08:47:35
【问题描述】:

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

【问题讨论】:

    标签: java javascript javascript-framework


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果我在我的 Javascript 中执行此操作,它可以工作: var args = Array.prototype.slice.call(arguments);我想我需要以一种特殊的方式解析参数。而且该函数不接受任何参数!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多