Как передать объект Javascript в апплет Java в Safari? - PullRequest
5 голосов
/ 11 февраля 2010

Я пытаюсь вызвать Java-апплет из Javascript, но когда я передаю объект, Java-апплет получает только ноль. Это работает в IE и Firefox, но не в Safari 4 (пробовал версии для OSX и Windows, но ни одна из них не работает).

Метод Java-апплета, который я вызываю, может выглядеть следующим образом:

public void sampleFunction(JSObject someobject) throws Exception
{
   someobject.call("somemethod");
}

И HTML / Javascript, который его вызывает:

<applet archive="Test.jar" code="Test.class" width="0" height="0" id="TestApplet" MAYSCRIPT></applet>
...
var testobject = { somemethod: function() {} };
document.TestApplet.sampleFunction(testobject);

NullPointerException является результатом в Safari, поскольку параметр "someobject" в апплете Java имеет значение null. Опять же, это прекрасно работает в Firefox и IE в Windows, OSX и Linux, но в Safari sampleFunction () получит нулевой параметр.

Кроме того, обратное направление тоже не работает. Если я получаю объект окна и вызываю Javascript из Java, любые объекты, которые я передаю, не работают. Например, я могу передать массив строк и в Javascript получаю объект типа [Ljava.lang.String, но не могу получить к нему доступ (длина не определена, операторы массива не работают).

Safari просто сломан или как? Есть идеи?

1 Ответ

1 голос
/ 16 февраля 2010

Если вы можете, я бы предложил сериализовать объект в строку JSON. Вы можете поймать json2.js с json.org и использовать json.stringify (obj), отправив его в ваш Java-апплет. На стороне java вы должны иметь возможность десериализовать строку JSON в собственный объект. Это, вероятно, самый надежный способ передачи данных. Недостатком этого метода является то, что вам, вероятно, понадобятся средства для определения метода обратного вызова для запуска со стороны Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...