2008-09-11 4 views
10

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

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

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

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

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

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

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

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

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

ответ

12

Для первого вопроса, как о попытке

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