Как загрузить внешнее встроенное приложение ExtJS в песочницу Air - PullRequest
1 голос
/ 03 января 2011

Я новичок в Adobe Air, поэтому вопрос может быть очевиден, но я не мог приступить к работе в течение нескольких дней, пытаясь с этим справиться.

Я пытаюсь создать приложение с поддержкой air, в которое встроен необходимый код, создать процесс запуска и извлечь необходимые ресурсы во время выполнения из развернутого веб-приложения и внедрить его в основное приложение. Я создал две разные песочницы (родительская песочница для основного приложения и встроенная песочница для развернутого приложения). вот что я сделал:

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);
   }
});

Я пробовал разные вещи в упомянутой выше «строке», такие как вставка только URL-адреса, получение содержимого с помощью ajax и передача содержимого, передача содержимого eval () - ed в родительскую песочницу. и независимо от того, что я получил Результат выражения 'App.Signin' [undefined] не является конструктором. И хорошо, он также недоступен в элементе DOM в Air Introspector.

Я помню, как читал где-то о загрузке javascript перед событием onLoad, но я не мог вспомнить, где именно, и что более важно, я не знаю, как это реализовать. Разве мой подход не до onLoad?

Или не могли бы вы показать мне руководство по решению этой проблемы.

1 Ответ

0 голосов
/ 03 января 2011

может быть примером «Простые задачи» (AIR) могут помочь вам

...