Вызов функции Javascript из Java с использованием JSObject - PullRequest
2 голосов
/ 02 сентября 2010

Я просто пытаюсь вызвать функцию Javascript из Java с помощью JSObject. Мне нужна функция Javascript для обновления текстового поля HTML. Для этого мне нужно знать идентификатор элемента и значение.

Я пробовал это, но это не работает. При попытке получить доступ из 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]);
}

Ответы [ 3 ]

1 голос
/ 02 сентября 2010

Итак, я заметил, что вы используете массив объектов в Java и передаете строковые значения. Вы пытались использовать массив строк?

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

, попробуйте и посмотрите, работает ли это. я предполагаю, что javascript не способен понять, что передаваемый массив объектов является массивом строк. хотя я не уверен на 100%.

0 голосов
/ 30 июня 2015

В вашем примере вы должны увидеть alert('e') и alert('l'), потому что вы передаете два аргумента в updateElement.Вы всегда можете использовать объект arguments в javascript для проверки того, что вы действительно получили.

Я предлагаю всегда создавать окончательный список аргументов отдельно и в последний раз, чтобы у вас не возникало этой проблемы.Это просто ужасный недостаток дизайна, что они не обновили подпись до JSObject.call(String, Object...) в Java 5, у нас было бы намного меньше головной боли таким образом.

Более чистое решение было бы:

// 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 });
0 голосов
/ 06 июня 2012

Способ вызова заключается в том, что вы передаете массив аргументов функций . Здесь у вас есть только один аргумент (ваш массив), поэтому вам нужно вызвать его как:

//Java code
Object[][] objects = new Object[][1];
objects[0]=new Object[2];
objects[0][0] = "elementId";
objects[0][1] = "elementValue";
window.call("updateElement",objects);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...