Pergunta

Estou trabalhando em um projeto em que usamos um miniaplicativo Java para parte da interface do usuário (um mapa, especificamente), mas construindo o restante da interface do usuário em torno do miniaplicativo em HTML/JavaScript, comunicando-se com o miniaplicativo por meio do LiveConnect/NPAPI .Um pouco bizarro, eu sei, mas vamos presumir que a configuração não esteja em discussão.Comecei planejando usar jQuery como minha estrutura JavaScript, mas me deparei com dois problemas.

Emita o primeiro:

Selecionar o miniaplicativo não fornece acesso aos métodos do miniaplicativo.

Java:

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

JavaScript:

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

Executar o JavaScript acima resulta em

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

Isso contrasta com o Prototype, onde o código análogo funciona:

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

Então... para onde foram os métodos do miniaplicativo?

Emita o segundo:

Há um problema conhecido com jQuery e miniaplicativos no Firefox 2: http://www.pengoworks.com/workshop/jquery/bug_applet/jquery_applet_bug.htm

É um tiro no escuro, mas alguém sabe de uma solução alternativa?Suspeito que esse problema não possa ser corrigido, o que significará mudar para o Prototype.

Obrigado pela ajuda!

Foi útil?

Solução

Para a primeira questão, que tal tentar

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

Para a segunda questão aqui está uma fio com uma possível solução alternativa.

Citando a solução alternativa

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

altere esse código para:

// Window isn't included so as not to unbind existing unload events
jQuery(window).bind("unload",
function() {
        jQuery("*:not('applet, object')").add(document).unbind();
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top