JSObject - Übergabe eines Arrays aus Java an JavaScript

higginz

Grünschnabel
Hallo,

ich sitze nun schon seit längerer Zeit an folgendem Problem:

Ich habe eine HTML-Seite in die ich ein Java-Applet einbinde. Das Applet befüllt ein String-Array mit Daten. Dieses möchte ich an eine JavaScript-Funktion übergeben. Also benutze ich JSObject. Dafür lass ich mir das Fenster geben, in dem das Applet ausgeführt wird. Danach bilde ich die Argumente für den Methodenaufruf window.call(). Dann rufe ich window.call() auf:

Code:
String[] values = new String[] {"Wert1", "Wert2", "Wert3", "Wert4"};
JSObject window = JSObject.getWindow(this);
String name = "myJS";
Object[] args = new Object[] {values};
window.call(name, args);


Meine JavaScript-Funktion "myJS" in der HTML-Seite soll das Array übernehmen und irgendwas damit anfangen. Am Anfang hätte ich gerne erstmal die Länge des Arrays:

Code:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function myJS(v) {
	alert(v.length);	
}
</script>
</head>
<body>
<applet code="Test" archive="Test.jar" width="100" height="100" name="applet" MAYSCRIPT></applet>
</body>
</html>


Aber ich bekomme immer folgende Exception:
netscape.javascript.JSException


Wie kann ich auf das Array zugreifen? Ich möchte den String nicht serialisieren mit irgendwelchen Trennern.


Gruß
higginz
 
Okay, hab selbst eine Lösung gefunden: ;-)


Ich übergebe das String-Array direkt der window.call()-Methode:

Code:
JSObject window = JSObject.getWindow(this);
String name = "myJS";
String[] values = new String[] {"Wert1", "Wert2", "Wert3", "Wert4"};
window.call(name, values);


Die JavaScript-Funktion sieht dann folgendermaßen aus:
Code:
function myJS() {
	alert(arguments.length);
}


Ich weiß nicht wieso, aber irgendwie kann ich als übergebene Parameter "arguments" benutzen. Vielleicht kann das noch jemand erklären? Ich deklariere das doch nirgends.


higginz
 
Hab schnell mal eine Antwort auf meine letzte Frage gefunden. :google:


"arguments" ist eine lokale Variable, die es in allen JavaScript-Funktionen gibt. Sie stellt die tatsächlich übergebenen Parameter dar, hat ein .length-Attribut und auf die einzelnen Parameter kann wie bei einem Array über arguments[x] zugegriffen werden.


higginz
 
Zurück