我们有一个基于Web的项目,但是需要对用户的文件系统具有重要的访问权限。 HTML尚未允许我们进行足够的访问,并且由于我们主要是Grails商店,因此将文件访问代码作为applet进行访问比将其作为Flash代码有意义得多。
我们对Griffon有所涉猎(该项目的先前原型是100%Griffon Webstart应用程序),并且喜欢Griffon赋予小程序的结构和“样板去除”。然而,我们一直遇到的问题是将Html / JavaScript UI连接到实际上完成所有工作的Griffon applet。
我们发现詹姆斯·威廉姆斯(James Williams)从Griffon应用程序调用JavaScript函数的excellent example,但未能找到相反的示例:从JavaScript端调用Griffon函数。
主要问题是我们希望让Griffon应用程序“无头”(或尽可能接近),因为所有UI都将由JavaScript和HTML处理。这意味着我们无法使用从Griffon应用程序内部触发的UI事件,就像James在他的示例中那样。
有没有人向我们学习过JavaScript与Griffon小程序交互的示例?或关于如何从Griffon applet到JavaScript展示事物的任何建议?
最佳答案
在我看来,您想使用JavaScript从外部调用Applet中的Java(或常规)函数,对吗?
为了使它起作用:
您必须启用livescript,并且必须对applet的jar进行签名。
下一步是在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>
可以在more detailed example上找到my blog。