我们有一个基于Web的项目,但需要具有对用户文件系统的重要访问权限。 HTML(尚未)允许我们获得足够的访问权限,并且由于我们主要是Grails商店,因此将文件访问代码作为applet比将其作为Flash代码更有意义。
我们已经与Griffon(此项目的先前原型是100%Griffon Webstart应用程序)稍微涉足,并且喜欢Griffon给applet的结构和“样板删除”。然而,我们遇到的问题是将Html / JavaScript UI连接到实际完成所有工作的Griffon applet。
我们发现James Williams'excellent example从Griffon应用程序调用JavaScript函数,但未能找到相反的示例:从JavaScript端调用Griffon函数。
主要问题是我们希望Griffon应用程序“无头”(或尽可能接近),因为所有UI都将由JavaScript和HTML处理。这意味着我们无法使用在Griffon应用程序中触发的UI事件,就像James在他的示例中所做的那样。
有没有人有一个JavaScript与我们可以学习的Griffon applet交互的例子?或者有关如何在Griffon applet中表达内容到JavaScript的任何建议?
答案 0 :(得分:2)
听起来我想用外部世界使用JavaScript调用Applet中的Java(或groovy!)函数,对吧?
为了实现这一目标:
必须启用lifecript 并且必须签署applet的jar 。
下一步是在applet子类中定义一个知道如何处理你想要进行的调用的入口点。
这是一个棘手的问题,因为默认的applet类是griffon.swing.SwingApplet
所以你必须创建自己的griffon.swing.SwingApplet
子类并将其用作主入口点。
您的子类将定义从JavaScript端调用的方法(或方法)。这应该是:
import griffon.swing.SwingApplet;
public class MySwingApplet extends SwingApplet {
// match superclass constructors
public CalculatorApplet(String[] args) {
super(args);
}
public Object myAppletMethod(String[] args) {
// args come form the JS world
// do whatever is necessary here
}
}
要告诉Griffon使用我们的自定义applet子类而不是默认,只需创建一个名为griffon-app/scripts/_Events.groovy
的文件并将以下内容放入其中:
eventPackageAppStart = {
griffonAppletClass = 'calculator.CalculatorApplet'
}
最后,抓住javascript中的applet对象并使用您认为合适的任何值调用myAppletMethod()
:
<script>
function talkToApplet() {
var r = document.applets.myAppletId.myAppletMethod("arg1", "arg2");
alert(r);
}
</script>