簡體   English   中英

使用JSObject從Java調用Javascript函數

[英]Calling Javascript function from Java using JSObject

我只是想使用JSObject從Java調用Javascript函數。 我需要Javascript函數來更新HTML文本字段。 為此,我需要知道元素ID和值。

我已經嘗試過了,但是沒有用。 嘗試從Javascript訪問時,傳遞的值為空。

所以我的問題是如何從Javascript訪問這些值? 我肯定錯過了什么。

如果我聲明大小為1的對象,它將起作用,但是我需要在objects數組中傳遞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中使用Object數組並傳入字符串值。 您是否嘗試過使用String數組?

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

嘗試一下,看看是否可行。 我的猜測是javascript無法實現所傳遞的對象數組是字符串數組。 雖然我不確定100%。

調用的工作方式是傳遞函數參數數組 在這里,您只有一個參數(數組),因此需要像這樣調用它:

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

在您的示例中,您應該看到出現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 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM