#java #javascript #null #applet #return
#java #javascript #нулевой #апплет #Возврат
Вопрос:
Я пытался осмыслить это в своей голове. Пожалуйста, помогите мне, где я облажался.
Аналогично вызовам по этому URL: http://www.codejava.net/java-se/applet/call-javascript-function-from-java-applet
Я делал вызовы из методов инициализации и запуска моего Java-апплета в браузере.
Javascript выглядит так:
function getHHandler() {
console.log("handler requested from applet");
return HHandler.handler();
}
HHandler.instance = null;
function HHandler() {
...
}
HHandler.prototype = {
doStuff : function() {
}
};
HHandler.handler = function() {
if(HHandler.instance == null)
HHandler.instance = new HHandler();
return jsb.instance;
};
Вот мой готовый к отладке метод из апплета — ничего особенного, по крайней мере, должно быть:
private Object getHandlerObject() {
Object jo = browser.call("getHHandler", null);
log("call getJSBHandler():" jo);
return jo;
}
Я просматривал примеры oracles, бесчисленные сайты, учебные пособия, документацию, и все они указывают на одни и те же методы call и eval.
Испытайте, что происходит, когда апплет вызывает функцию javascript getHHandler — я вижу журнал консоли в браузере, видя, что действие действительно произошло, однако оператор return из javascript никогда не возвращает его в код Java. Таким образом, Java остается с нулевым объектом, который я не использую. Я даже перепроверил, просто чтобы убедиться, что прямо перед оператором return значение js var не равно null.
Я могу понять, почему browser.call(«HHandler.handler», null); взбесился бы и выдал исключение NotAFunction, но в этом случае, кажется, все идет гладко, но возвращаемое значение.
<applet id="appletId" archive="../path/to/applet.jar" code=com.package.Main.class width="1" height="1" mayscript></applet>
Даже не имеет значения, является ли апплет самоподписанным или не подписан вообще. Добавлен Mayscript — не то чтобы это имело значение.
Какие-либо предложения / входные данные?
Комментарии:
1. «Даже не имеет значения, является ли апплет самоподписанным или вообще не подписан». Это также не имеет никакого значения. «Самоподписанный» апплет теперь считается неподписанным.
Ответ №1:
Какую версию Java вы используете? Недавно * racle многое изменил в апплетах. Все апплеты должны быть подписаны официальным сертификатом (самоподписания недостаточно). А также посмотрите изменения LiveConnect с 7u45.
Теперь
а) использовать официальный сертификат или
б) если вы используете и обновляете Java, попробуйте более старую и посмотрите, работает ли она. Если это так, то вы знаете, с чего начать…
Комментарии:
1. Java плагин 10.60.2.19 С использованием JRE версии 1.7.0_60-b19 x64 Я пытался использовать литеральные объекты (int и string) для возвращаемых значений, которые, что интересно, появляются в java. Javascript зависает на строке HHandler.handler(); строка, как если бы код после этого не выполнялся (даже не регистрировался).
2. Вы не ответили на полный вопрос: вы пробовали официальный сертификат? Если нет, а) попробуйте использовать более старую java б) опустите ползунок безопасности Java до среднего в) добавьте свой URL-адрес в список сайтов исключений и г) последнее, но не менее важное, правильно установите атрибуты