2008-09-11 9 views
10

Sto lavorando a un progetto in cui stiamo utilizzando un'applet Java per parte dell'interfaccia utente (una mappa, in particolare), ma costruendo il resto dell'interfaccia utente attorno all'applet in HTML/JavaScript, comunicando con l'applet tramite LiveConnect/NPAPI. Un po 'bizzarro, lo so, ma supponiamo che l'installazione non sia in discussione. Ho iniziato a pianificare l'utilizzo di jQuery come framework JavaScript, ma ho riscontrato due problemi.jQuery e Java applet

Problema il primo:

Selezionando l'applet non fornisce accesso ai metodi del applet.

Java:

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

JavaScript:

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

Esecuzione del sopra i risultati di JavaScript in

$("#applet-id").foo is not a function

Questo è in contrasto al prototipo, in cui il codice analogo funziona:

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

Quindi ... dove sono andati i metodi dell'applet?

Problema il secondo:

C'è un problema noto con jQuery e applet in Firefox 2: http://www.pengoworks.com/workshop/jquery/bug_applet/jquery_applet_bug.htm

Si tratta di un lungo tiro, ma qualcuno sa di una soluzione alternativa? Sospetto che questo problema non sia risolvibile, il che significa passare a Prototype.

Grazie per l'aiuto!

risposta

12

Per il primo numero, che ne dite di provare

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

Per il secondo problema qui è un thread con una possibile soluzione.

Citando la soluzione

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

cambiamento che il codice a:

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