![](/img/trans.png)
[英]In java compare 2 objects of type JSObject using javascript operator '==='
[英]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.