Лучший способ - использовать этот SWF в качестве библиотеки (SWC) и связать его с вашим проектом. Таким образом вы сможете добиться строгой типизации и получить доступ к базовым классам.
Если у вас нет доступа ни к выпуску библиотеки объекта swf, ни к ее источнику для сборки библиотеки swc yourserlf, вы все равно можете использовать внешние классы, но не с строгой типизацией:
var ExtIndex : Class = loader.contentLoaderInfo.applicationDomain.getDefintiion("Index");
var instance : Object = new ExtIndex();
this.addElement(instance);
, поэтому вы должны определить instance
как объект.
Хотя, если класс Index
в вашем SWF-файле реализует interface
, о котором вы знаете (у вас он есть в вашем проекте), например I_Index
, вы можете использовать его вместо Object
:
var instance : I_Index = new ExtIndex();
this.addElement(instance);
Вы также можете найти эту статью полезной при принятии решения, по какому пути идти.
Обновление 1
Объявление loader
в Flex:
var loader: flash.display.Loader;
[...]
var ExtIndex: Class = loader.contentLoaderInfo.applicationDomain.
getDefinition("your.package.Index") as Class;
Если у вас есть класс Index
в пакете (отличный от стандартного), вы должны указать его в его имени. Приведенный выше код ищет класс Index
внутри пакета your/package
.
Документы API для getDefinition
:
Получает публичное определение из
указанный домен приложения.
определение может быть определением класса,
пространство имен или функция.
Параметры:
name
Название определения.
Возвращает : объект, связанный с определением.
Броски : ReferenceError
- Публичное определение с указанным именем не существует.
Языковая версия: 3.0
Версия проигрывателя: Flash 9, AIR 1.0
Обновление 2
Чтобы сделать класс Test
, определенный в вашем внешнем приложении, доступным из других приложений Flex, загрузив содержащий его SWF-файл, вы должны иметь переменную, объявленную с этим типом, в основном приложении вашего SWF-файла. В противном случае этот класс не будет скомпилирован в swf (чтобы сохранить его размер).
Flex только компилирует классы, которые фактически используются, в swf, поэтому недостаточно просто импортировать класс.
В Основное приложение вашего SWF вы должны объявить:
var _tmp:Index;
Это гарантирует, что класс Index
будет скомпилирован в ваш swf, и вы можете получить к нему доступ из другого приложения, которое загружает этот swf.
Обновление 3
Вы можете проверить, как это работает на по этой ссылке . Исходный код тоже включен.
Поскольку существует два проекта, в папке [src] вы можете увидеть исходный текст теста, а в папке [source path src] - источник загруженного извне файла swf.
Если вы загружаете весь проект, убедитесь, что вы разделили два проекта.