Applet jQuery et Java
-
09-06-2019 - |
Question
Je travaille sur un projet dans lequel 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 en HTML/JavaScript, en communiquant avec l'applet via LiveConnect/NPAPI. .Un peu bizarre, je sais, mais supposons que la configuration ne soit pas en discussion.J'ai commencé par planifier l'utilisation de jQuery comme framework JavaScript, mais j'ai rencontré deux problèmes.
Émettez le premier :
La sélection de l'applet ne donne pas accès 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());
L'exécution du JavaScript ci-dessus entraîne
$("#applet-id").foo is not a function
Cela contraste avec Prototype, où le code analogue fonctionne :
var applet = $("applet-id");
alert(applet.foo());
Alors... où sont passées les méthodes des applet ?
Émettez le deuxième :
Il existe 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 long, mais quelqu'un connaît-il une solution de contournement ?Je soupçonne que ce problème ne peut pas être résolu, ce qui nécessitera de passer au prototype.
Merci pour l'aide!
La solution
Pour le premier numéro, que diriez-vous d'essayer
alert( $("#applet-id")[0].foo() );
Pour le deuxième numéro, 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(); });
changez ce code en :
// Window isn't included so as not to unbind existing unload events jQuery(window).bind("unload", function() { jQuery("*:not('applet, object')").add(document).unbind(); });