【问题标题】:How can functions in a Griffon applet be called from JavaScript?如何从 JavaScript 调用 Griffon 小程序中的函数?
【发布时间】:2013-07-11 16:21:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java javascript groovy applet griffon


    【解决方案1】:

    在我看来,您想使用 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 中获取小程序对象并使用您认为合适的任何值调用 myAppletMethod()

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

    more detailed example 可以在 my blog 上找到。

    【讨论】:

    • 我已经添加了关于如何启动和运行这个东西的更详细的描述,你可以在这里找到它jroller.com/aalmiray/entry/…
    • 该示例是否适用于一个没有任何内容的视图,所以本质上是一个 1px x 1px 的框架?或者有没有更好的方法让它根本不显示在页面上,本质上是一个更强大的 JS 库?打开文件对话框会正常工作吗?
    • 当然,即使是 1x1 像素的框架,它也应该可以工作。如果小程序不可见,则不会加载它,因此您必须使其至少 1x1 像素大
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 2023-03-22
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多