У меня есть Java-апплет, запущенный в браузере, который вызывает некоторые функции javascript и ожидает результата от функций тезисов. Это работает со следующими конфигурациями:Являются ли Java-апплеты неспособными связываться с javascript в Firefox на Mac OS?
- Internet Explorer
- FireFox/Windows
- Safari/Mac
, но это не работает с Firefox на MAC OS
Источник проблема заключается в том, что вызовы win.eval всегда возвращают null. Я проверил это с Firefox 3.0.6 на Mac OS X 10.4.11
Немного кода:
JSObject win = (JSObject) JSObject.getWindow(this);
Object exp = win.eval("testfunc()");
System.out.println("exp = " + exp.toString());
Это вызывает java.lang.NullPointerException (exp.toString)() заявление) , Функция javascript testfunc возвращает true.
Я пробовал с win.call и получил тот же результат.
В свой тег applet входят атрибуты mayscript и scriptable.
Я нашел ответ благодаря Тристану. Испытывая его решение, я создал действительно простой тест, который мог бы работать и работал мой путь, чтобы найти виновника. Я был уверен, что сделал свои тесты с пустым testfunc(), который только что вернул true, но я, вероятно, не сделал этого, потому что в этом случае он работает. Настоящая проблема заключалась в том, что функция называется общедоступным методом апплета. Возможно, Liveconnect не справляется с этим делом в Firefox Mac.
Позвольте мне дать вам пример:
Java класс:
public class MyApplet extends Applet {
public int getMyValue() {
return 5;
}
public void somefunction() {
JSObject win = (JSObject) JSObject.getWindow(this);
Object exp = win.eval("jsfunc()");
System.out.println("exp = " + exp.toString());
}
}
И в яваскрипта код:
function jsfunc() {
var myApplet = document.getElementById("applet_id");
return myApplet.getMyValue() + 5;
}
ехр будет нулевым в SomeFunction ПОТОМУ jsfunc называет getMyValue() метод апплета. Если вы удалите все вызовы свойств апплета, вы круты.
Чтобы решить мою проблему, я решил дать все значения апплета, которые я использовал в качестве параметров моей функции javascript, и теперь я в порядке.
Это может быть не всегда, если javascript изменяет состояние апплета ... Мне повезло :)
Вызов функции не является проблемой, получая результат обратно. С операциями отладки я могу ясно видеть, что функция выполняется, но как-то возвращаемое значение теряется, и я получаю только «нуль». –