Java-апплет, вызывающий функцию javascript с возвращаемым значением

#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-адрес в список сайтов исключений и г) последнее, но не менее важное, правильно установите атрибуты