Вопрос

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

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

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

Джава:

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());

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

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

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

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

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

Это было полезно?

Решение

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

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

По второму вопросу вот нить с возможным обходным путем.

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

// 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();
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top