Загрузка внешнего SWF-файла

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

В ActionScript 3.0 SWF-файлы загружаются с помощью класса Loader. Чтобы загрузить внешний SWF-файл, код ActionScript должен выполнить четыре действия:

  1. создать новый объект URLRequest с URL-адресом файла;

  2. создать новый объект Loader;

  3. вызвать метод load() объекта Loader, передав в качестве параметра экземпляр URLRequest.

  4. вызвать метод addChild() для контейнера экранных объектов (такого как основная временная шкала документа Flash), чтобы добавить экземпляр Loader в список отображения.

В итоге код выглядит следующим образом:

var request:URLRequest = new URLRequest("http://www.[yourdomain].com/externalSwf.swf"); 
var loader:Loader = new Loader() 
loader.load(request); 
addChild(loader);

Этот же код можно использовать для загрузки графических файлов, например изображений в формате JPEG, GIF или PNG. Для этого нужно указать URL-адрес изображения, а не SWF-файла. В отличие от изображения, SWF-файл может содержать ActionScript. Таким образом, несмотря на сходство процессов загрузки SWF-файла и изображения, при загрузке внешнего SWF-файла оба SWF-файла, загружаемый и загружающий, должны находиться в одной изолированной программной среде, если SWF воспроизводится в Flash Player или AIR и для работы с внешним SWF-файлом планируется использовать ActionScript. Кроме того, если внешний SWF-файл содержит классы из того же пространства имен, что и классы в загружающем SWF-файле, возможно, потребуется создать новый домен приложения для загружаемого SWF-файла, чтобы предотвратить конфликты пространства имен. Дополнительные сведения по безопасности и рекомендации по домену программы см. в разделах «Работа с доменами приложений» и «Загрузка содержимого».

После успешной загрузки внешний SWF-файл можно получить через свойство Loader.content. Если внешний SWF-файл опубликован для ActionScript 3.0, это будет фрагмент ролика или спрайт в зависимости от того, какой класс он расширяет.

В среде Adobe AIR для iOS загрузка SWF-файла имеет некоторые отличия по сравнению с другими платформами. Дополнительные сведения см. в разделе Загрузка SWF-файлов в среде AIR для iOS.

Особенности загрузки SWF-файлов предыдущих версий

Если внешний SWF-файл опубликован с помощью одной из предшествующих версий ActionScript, следует учитывать важные ограничения. В отличие от SWF-файла версии ActionScript 3.0, выполняемого в среде AVM2 (ActionScript Virtual Machine 2), SWF-файл, опубликованный для ActionScript 1.0 или 2.0, выполняется в среде AVM1 (ActionScript Virtual Machine 1).

Между загрузкой SWF-файла ActionScript 1.0 или 2.0 в SWF-файл ActionScript 3.0 по сравнению с загрузкой SWF-файла ActionScript 3.0 имеются важные различия. Проигрыватель Flash Player обеспечивает полную обратную совместимость с ранее опубликованным содержимым. Любое содержимое, работающее в предыдущих версиях Flash Player, работает и в версиях Flash Player, поддерживающих ActionScript 3.0. Тем не менее, существует ряд ограничений.

  • Код ActionScript 3.0 может загружать SWF-файл, написанный на языке ActionScript 1.0 или 2.0. После того как SWF-файл, написанный на языке ActionScript 1.0 или 2.0, будет успешно загружен, загруженный объект (свойство Loader.content ) становится объектом AVM1Movie. Экземпляр AVM1Movie отличается от экземпляра MovieClip. Это экранный объект, но, в отличие от фрагмента ролика, он не включает методов и свойств, связанных с временной шкалой. Родительский SWF-файл версии AVM2 не может иметь доступа к свойствам, методам или объектам загруженного объекта AVM1Movie.

  • SWF-файлы, написанные в ActionScript 1.0 или 2.0, не могут загружать SWF-файлы, написанные в ActionScript 3.0. Это означает, что SWF-файлы, созданные в Adobe Flash 8 или Flex Builder 1.5, а также в более ранних версиях этих программ, не смогут загружать SWF-файлы в ActionScript 3.0.

    Единственным исключением из этого правила является то, что SWF-файл ActionScript 2.0 может заменить себя SWF-файлом ActionScript 3.0, если для этого SWF-файла ActionScript 2.0 не выполнялась какая-либо загрузка ни на один из его уровней. В SWF-файле ActionScript 2.0 это можно выполнить с помощью вызова loadMovieNum(), передав значение 0 параметру level.

  • В общем случае для SWF-файлов, написанных в ActionScript 1.0 или 2.0, необходимо выполнять перенос, если их предполагается использовать совместно с SWF-файлами ActionScript 3.0. Например, предположим, что создается проигрыватель мультимедийных данных с помощью ActionScript 2.0. Этот проигрыватель загружает различное содержимое, которое также было создано с помощью ActionScript 2.0. Нельзя создать новое содержимое в ActionScript 3.0 и загрузить его в этот проигрыватель мультимедийных данных. Необходимо выполнить перенос видеопроигрывателя в ActionScript 3.0.

    Однако если проигрыватель мультимедийных данных создан в ActionScript 3.0, он сможет выполнять отдельные загрузки содержимого ActionScript 2.0.

В следующих таблицах показаны ограничения предыдущих версий проигрывателя Flash Player в отношении загрузки более нового содержимого и выполнения программного кода, а также ограничения для взаимодействия между сценариями в SWF-файлах, написанных в различных версиях ActionScript.

Поддерживаемые функции

Flash Player 7

Flash Player 8

Для Flash Player 9 и 10

Может загружать SWF-файлы, опубликованные для

7 или более ранней версии

8 или более ранней версии

9 (или 10) и более ранних

Содержит этот AVM

AVM1

AVM1

AVM1 и AVM2

Выполняет SWF-файлы, записанные в ActionScript

1.0 и 2.0

1.0 и 2.0

1.0, 2.0 и 3.0

В следующей таблице «Поддерживаемые функции» относится к содержимому, выполняемому в проигрывателях Flash Player 9 или более поздней версии. Содержимое, выполняемое в проигрывателе Adobe Flash Player 8 или более ранней версии, может быть загружено, просмотрено и выполнено, а также использовано при вызове из других сценариев только в ActionScript 1.0 и 2.0.

Поддерживаемые функции

Содержимое, созданное в ActionScript 1.0 и 2.0

Содержимое, созданное в ActionScript 3.0

Может загружать и выполнять программный код в содержимом, созданном в

ActionScript 1.0 и 2.0

ActionScript 1.0 и 2.0, а также ActionScript 3.0

Может вызывать из сценариев содержимое, созданное в

ActionScript 1.0 и 2.0 (ActionScript 3.0 через LocalConnection)

ActionScript 1.0 и 2.0 через LocalConnection.

ActionScript 3.0