我们有一个基于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

09-28 15:04