如何从JavaScript调用Griffon applet中的函数?

时间:2013-07-11 16:21:36

标签: java javascript groovy applet griffon

我们有一个基于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的任何建议?

1 个答案:

答案 0 :(得分:2)

听起来我想用外部世界使用JavaScript调用Applet中的Java(或groovy!)函数,对吧?

为了实现这一目标:

  1. 必须启用lifecript 并且必须签署applet的jar

  2. 下一步是在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
        }
    }
    
  3. 告诉Griffon使用我们的自定义applet子类而不是默认,只需创建一个名为griffon-app/scripts/_Events.groovy的文件并将以下内容放入其中:

    eventPackageAppStart = {  
        griffonAppletClass = 'calculator.CalculatorApplet'  
    }
    
  4. 最后,抓住javascript中的applet对象并使用您认为合适的任何值调用myAppletMethod()

    <script>  
        function talkToApplet() {
            var r = document.applets.myAppletId.myAppletMethod("arg1", "arg2");  
            alert(r);
        }
    </script>
    

  5. more detailed example上可以找到my blog