2013-09-03 2 views
1

Я создал Java-апплет в прошлом году для подключения сокета из веб-приложения к локальному запущенному java-серверу. он работал нормально.Как я могу использовать методы апплета Java с помощью Javascript?

с последних обновлений java (7 r21, я думаю), я больше не могу обращаться к методам в javascript. Прямо сейчас я уменьшил апплет до тестового апплета (без методов doPriviligedAction), но даже это больше не работает.

текущий код, как

import java.applet.*; 

public class socketApplet extends Applet { 

    public void init() { 
     System.out.println("Applet initialisiert."); 
    } 

    public void start() { 
     System.out.println("Applet gestartet."); 
    } 

    public void paint() { 
     System.out.println("Applet aktualisiert."); 
    } 

    public void stop() { 
     System.out.println("Applet angehalten."); 
    } 

    public void destroy() { 
     System.out.println("Applet beendet."); 
    } 

    public String testApplet() { 
     System.out.println("Applet getestet."); 
     return "Yep, I'm the Applet."; 
    } 

} 

Перед обновлением я мог бы получить доступ к методам, как testApplet() в JavaScript, как это:

document.socketApplet.testApplet(); 

Апплет самоподписан и внедренного с апплетом HTML-теги. Он запускается (консоль java открывает и печатает отладочные сообщения, определенные в методах init, start и paint), но я не могу получить доступ к методу testApplet(). Ответ в Javascript «неопределен», пока апплет существует.

после чтения некоторого времени (несколько дней теперь ...) о новых изменениях безопасности, я добавил manifest.txt со следующим содержанием:

Main-Class: socketApplet 
Permissions: all-permissions 
Codebase: * 
Trusted-Library: true 

Не повез с или без доверенного -Атрибут библиотеки.

Что мне нужно сделать, чтобы снова включить доступ с помощью javascript?

Edit: Реализация:

<applet id="socketApplet" width="100" height="100" archive="../../socketApplet.jar" name="socketApplet" code="socketApplet" scriptable="true"> 

Я тестирую с новейшими версиями Firefox и Safari на до даты Mac OS X машины.

Edit2: я творю и подписание баночки, как этого enter image description here

EDIT3: Хорошо, теперь моя баночка работала несколько раз (не подряд), я получил enter image description here

и в консоли enter image description here

Но большую часть времени он не работает. перезапуск браузера, очистка кешей, ничего не работает. теперь проверим это на другом ПК (снова).

Редактировать: Хорошо, что он работает на виртуальной машине с окнами xp и java 32bit 7u25 - на моем 64-битном Mac всего лишь 1 из 30 попыток.

+0

Какую версию какой браузер является тестирование в? Что такое HTML, используемый для запуска апплета? –

+0

ty для быстрого ответа, я обновил основную запись (см. Раздел редактирования в конце). –

+1

Рекомендации: 1) сделайте апплет отличной от нуля ширины и высоты. Элемент 0x0 на веб-странице автоматически подозрительный, и это может вызвать более высокий уровень безопасности в браузере или любые инструменты, которые браузер установил для поиска подозрительной активности. 2) Добавьте атрибут 'scriptable =" true ", чтобы указать, что апплет может быть вызван из Javascript. –

ответ

1

Хорошо я нашел источник всех зол ...

это не имеет ничего общего с апплета. запутанная ситуация заключалась в том, что он работал в firefox на окнах, а не в firefox на Mac (такие же версии FF, те же версии Java). Safari на моем mac не работал, потому что плагин был отключен ...

Так что это была проблема только с Firefox на Mac. Я тестировал разные ситуации, и апплет работал при написании кода апплета выше на html-страницу.Перед тем, я создал апплет динамически (что необходимо в программном обеспечении):

var applet = document.createElement('applet'); 

    applet.archive  = 'socketApplet.jar'; 
    applet.id   = 'socketApplet'; 
    applet.name   = 'socketApplet'; 
    applet.code   = 'socketApplet'; 
    applet.scriptable = 'true'; 
    applet.width  = '0'; 
    applet.height  = '0'; 

    document.body.appendChild(applet); 

Он работает везде, но не в Firefox на Mac. Итак, как обходной путь, я должен внедрить апплет в iframe, и мне нужно встроить iframe динамически. что работает ...

var mFrame  = document.createElement('iframe'); 
    mFrame.id  = 'testFrame'; 
    mFrame.height = '200'; 
    mFrame.width = '400'; 
    document.body.appendChild(mFrame); 
    mFrame.src  = 'frame.html'; // contains the applet code 

Далее я собираюсь изменить тэг html на объект и вставить тег для поддержки IE. Спасибо за помощь Эндрю Томпсона!

Мне не нравится версия iframe, потому что доступ к апплету через javascript более сложный, но похоже, что другого пути нет.

Я собираюсь отправить билет на ошибку Mozilla для этого. https://bugzilla.mozilla.org/show_bug.cgi?id=912880

Может быть похож на этот, но другой ситуации: https://bugzilla.mozilla.org/show_bug.cgi?id=872969

+0

Обновление: они закрыли билет с ошибкой как «WONTFIX» - https://bugzilla.mozilla.org/show_bug.cgi?id=912880#c9 –

Смежные вопросы