Applets jQuery et Java

Je travaille sur un projet où nous utilisons une applet Java pour une partie de l'interface utilisateur (une carte, en particulier), mais construisons le reste de l'interface utilisateur autour de l'applet dans HTML / JavaScript, en communiquant avec l'applet via LiveConnect / NPAPI . Un peu bizarre, je le sais, mais supposons que l'installation n'est pas en discussion. J'ai commencé à planifier l'utilisation de jQuery comme mon framework JavaScript, mais j'ai rencontré deux problèmes.

Émettez le premier:

La sélection de l'applet ne permet pas d'accéder aux méthodes de l'applet.

Java:

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

JavaScript:

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

Exécuter les résultats de JavaScript ci-dessus dans

  $ ("# Applet-id"). Foo n'est pas une fonction 

Cela contraste avec Prototype, où le code analogue fonctionne:

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

Alors … où sont passées les méthodes de l'applet?

Problème le deuxième:

Il y a un problème connu avec jQuery et les applets dans Firefox 2: http://www.pengoworks.com/workshop/jquery/bug_applet/jquery_applet_bug.htm

C'est un long coup, mais est-ce que quelqu'un connaît une solution de contournement? Je soupçonne que ce problème n'est pas réglable, ce qui signifie passer à Prototype.

Merci pour l'aide!

Pour le premier problème, que diriez-vous d'essayer

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

Pour le deuxième problème, voici un fil avec une solution de contournement possible.

Citant la solution de contournement

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

Modifiez ce code pour:

 // Window isn't included so as not to unbind existing unload events jQuery(window).bind("unload", function() { jQuery("*:not('applet, object')").add(document).unbind(); });