jQuery и Java-апплеты - PullRequest
       17

jQuery и Java-апплеты

10 голосов
/ 11 сентября 2008

Я работаю над проектом, в котором мы используем Java-апплет для части пользовательского интерфейса (в частности, карту), но строим остальную часть UI вокруг апплета в HTML / JavaScript, взаимодействуя с апплетом через LiveConnect / NPAPI. Немного странно, я знаю, но давайте предположим, что установка не обсуждается. Я начал планировать использовать jQuery в качестве JavaScript-фреймворка, но столкнулся с двумя проблемами.

Выпуск первый:

Выбор апплета не обеспечивает доступ к методам апплета.

Java:

public class MyApplet extends JApplet {
  // ...
  public String foo() { return "foo!"; }
}

JavaScript:

var applet = $("#applet-id");
alert(applet.foo());

Запуск вышеуказанного JavaScript приводит к

$("#applet-id").foo is not a function

Это в отличие от Prototype, где аналогичный код работает:

var applet = $("applet-id");
alert(applet.foo());

Итак ... куда делись методы апплета?

Выпуск второй:

В Firefox 2 существует известная проблема с jQuery и апплетами: http://www.pengoworks.com/workshop/jquery/bug_applet/jquery_applet_bug.htm

Это длинный выстрел, но кто-нибудь знает об обходном пути? Я подозреваю, что эта проблема не решаема, что означает переход на Prototype.

Спасибо за помощь!

1 Ответ

12 голосов
/ 11 сентября 2008

Для первого выпуска, как насчет попытки

alert( $("#applet-id")[0].foo() );

Для второго выпуска здесь - thread с возможным обходным путем.

Цитирование обходного пути

// Prevent memory leaks in IE
// And  prevent errors on refresh with events  like mouseover in other  browsers
// Window isn't included so as not to unbind existing unload events
jQuery(window).bind("unload",
function() {
        jQuery("*").add(document).unbind();
});

изменить этот код на:

// Window isn't included so as not to unbind existing unload events
jQuery(window).bind("unload",
function() {
        jQuery("*:not('applet, object')").add(document).unbind();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...