我是Adobe Air的新手,所以问题可能很明显,但是在为之苦苦挣扎的日子里,我却无法工作。

我正在尝试使用包含嵌入式所需代码的air构建应用程序,以构建启动过程并从已部署的Web应用程序中获取运行时所需的资源,并将其注入到主应用程序中。我已经构建了两个不同的沙箱(用于主air应用程序的父沙箱,以及用于已部署应用程序的子沙箱的iframe)。这是我所做的:

air.html

<html>
<head>
   ...
   <script type="text/javascript" src="/scripts/app/load.js"></script>
</head>

<body id="baseBody" onload="Load.init();">
   <iframe
      id="sandbox"
      sandboxRoot="http://localhost:8080/webapp/"
      style="width:0;height:0;display:none;"
      ondominitialize="Load.bridge();">
   </iframe>
</body>
</html>


load.js(父级沙箱)

Load = function() {
   return {
      sandbox: null,
      bridge: function() {
         document.getElementById('sandbox').contentWindow.parentSandboxBridge = {
            initChild: function() {
               sandbox = document.getElementById('sandbox').contentWindow.childSandboxBridge;
               sandbox.loadSignin();
               sandbox.buildParent();
            },
            buildBase: function() {
               signin = new App.Signin({
                  ...
               });
               new Ext.air.Window({
                  ...
                  items: [signin],
                  ...
               });
            },
            importing: function(url) {
               // Creating Script tag and Append it to Head tag
            }
         };
      },
      init: function() {
         document.getElementById('sandbox').src = './load';
      }
   };
}();


加载(子沙箱上的JSP)

<html>
<head>
   <script type="text/javascript" src="http://localhost:8080/webapp/scripts/app/load.js"></script>
</head>

<body onload="Load.init();"></body>
</html>


load.js(子沙箱)

Load = function() {
   return {
      init: function() {
         window.childSandboxBridge = {
            loadSignin: function() {
               // "The Line"
               window.parentSandboxBridge.importing('/path/to/signin/script/on/web/server');
            },
            buildParent: function() {
               window.parentSandboxBridge.buildBase();
            }

            window.parentSandboxBridge.initChild();
         };
      }
   };
}();


signin.js

Ext.namespace('App.Signin');

App.Signin = Ext.extend(Ext.form.FormPanel, {
   initComponent: function() {
      var formPanelConfig = {
         items: [{
            ...
         }]
      };

      Ext.apply(this, Ext.apply(this.initialConfig, formPanelConfig));
      App.Signin.superclass.initComponent.apply(this, arguments);
   }
});


我在上面提到的“ The Line”上尝试了其他方法,例如仅插入url,通过ajax获取内容并传递内容,将eval()-ed内容传递给父级沙箱。无论如何,我都得到了表达式'App.Signin'的结果[未定义]不是构造函数。而且,它在Air Introspector的DOM元素中也不可用。

我记得在onLoad事件之前读过一些有关加载javascript的内容,但是我不记得确切的位置,更重要的是我不知道如何实现它。在onLoad之前不是我的方法吗?

或者,您可以告诉我解决该问题的指南。

最佳答案

可能是“简单任务”(AIR)可以帮助您的示例

关于javascript - 如何将外部ExtJS构建的应用程序加载到Air沙箱中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4584786/

10-10 22:09