2

我们有一个基于 Web 的项目,但需要对用户的文件系统进行大量访问。HTML (目前)还没有让我们有足够的访问权限,而且由于我们主要是一家 Grails 商店,因此将文件访问代码作为 applet 比使用 Flash 代码更有意义。

我们已经对 Griffon 进行了一些尝试(该项目之前的原型是 100% Griffon Webstart 应用程序),并且喜欢 Griffon 为小程序提供的结构和“样板删除”。然而,我们一直遇到的问题是将 Html / JavaScript UI 连接到实际完成所有工作的 Griffon 小程序。

我们找到了 James Williams 从 Griffon 应用程序调用 JavaScript 函数的出色示例,但找不到相反的示例:从 JavaScript 端调用 Griffon 函数。

主要问题是我们希望 Griffon 应用程序“无头”(或尽可能接近),因为所有 UI 都将由 JavaScript 和 HTML 处理。这意味着我们不能像 James 在他的示例中那样使用从 Griffon 应用程序中触发的 UI 事件。

有人有 JavaScript 与 Griffon 小程序交互的示例,我们可以从中学习吗?或者关于如何将 Griffon 小程序中的内容显示为 JavaScript 的任何建议?

4

1 回答 1

2

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

为了使它起作用:

  1. 必须启用 livescript并且必须对小程序的 jar 进行签名

  2. 下一步是在小程序子类中定义一个入口点,该入口点知道如何处理您要进行的调用

    这是它变得棘手的地方,因为默认的小程序类是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 使用我们的自定义小程序子类而不是默认的,只需创建一个名为的文件并将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>
    

可以在我的博客上找到更详细的示例

于 2013-07-11T20:39:38.590 回答