jQuery 和 Java 小程序

发布于 2024-07-04 07:23:51 字数 1043 浏览 4 评论 0原文

我正在开发一个项目,其中我们使用 Java 小程序作为 UI 的一部分(特别是地图),但在 HTML/JavaScript 中围绕小程序构建 UI 的其余部分,通过 LiveConnect/NPAPI 与小程序进行通信。 我知道这有点奇怪,但我们假设没有讨论设置。 我开始计划使用 jQuery 作为我的 JavaScript 框架,但我遇到了两个问题。

发出第一个问题:

选择小程序并不提供对小程序方法的访问。

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 形成鲜明对比,Prototype 中类似的代码确实可以工作:

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

那么...小程序方法去哪儿了?

问题第二个问题:

Firefox 2 中的 jQuery 和小程序存在一个已知问题:http://www.pengoworks.com/workshop/jquery/bug_applet/jquery_applet_bug.htm

这是一个很遥远的机会,但有人知道解决方法吗? 我怀疑这个问题无法修复,这意味着要切换到原型。

谢谢您的帮助!

I'm working on a project where we're using a Java applet for part of the UI (a map, specifically), but building the rest of the UI around the applet in HTML/JavaScript, communicating with the applet through LiveConnect/NPAPI. A little bizarre, I know, but let's presume that setup is not under discussion. I started out planning on using jQuery as my JavaScript framework, but I've run into two issues.

Issue the first:

Selecting the applet doesn't provide access to the applet's methods.

Java:

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

JavaScript:

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

Running the above JavaScript results in

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

This is in contrast to Prototype, where the analogous code does work:

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

So...where'd the applet methods go?

Issue the second:

There's a known problem with jQuery and applets in Firefox 2: http://www.pengoworks.com/workshop/jquery/bug_applet/jquery_applet_bug.htm

It's a long shot, but does anybody know of a workaround? I suspect this problem isn't fixable, which will mean switching to Prototype.

Thanks for the help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我家小可爱 2024-07-11 07:23:51

对于第一个问题,如何尝试

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

对于第二个问题,这里是一个线程< /a> 有一个可能的解决方法。

引用解决方法

//防止IE内存泄漏 
  // 并防止在其他浏览器中使用鼠标悬停等事件刷新时出现错误 
  // 不包含窗口,以免取消绑定现有的卸载事件 
  jQuery(窗口).bind("卸载", 
  功能() { 
          jQuery("*").add(document).unbind(); 
  }); 
  

将该代码更改为:

// 不包含窗口,以免取消绑定现有的卸载事件 
  jQuery(窗口).bind("卸载", 
  功能() { 
          jQuery("*:not('applet, object')").add(document).unbind(); 
  }); 
  

For the first issue, how about trying

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

For the second issue here is a thread with a possible workaround.

Quoting the workaround

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

change that code to:

// Window isn't included so as not to unbind existing unload events
jQuery(window).bind("unload",
function() {
        jQuery("*:not('applet, object')").add(document).unbind();
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文