jQuery и Java-апплеты
-
09-06-2019 - |
Вопрос
Я работаю над проектом, в котором мы используем апплет 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(); });