2010-09-02 141 views
2

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

我試過這個,但它不起作用。當試圖從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]); 
} 

回答

1

所以我注意到你在java中使用Object數組並傳入字符串值。 您是否嘗試過使用字符串數組?

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

給一個嘗試,看看是否有效。我的猜測是,JavaScript不能夠實現被傳遞的對象數組是一個字符串數組。雖然我不是100%肯定的。

+0

如果我這樣做,在我的JavaScript它的工作原理: VAR args = Array.prototype.slice.call(arguments); 我想我需要用特殊的方式解析參數。這個函數不需要任何參數! – Marquinio 2010-09-03 13:41:56

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

在你的榜樣,你應該看到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 });