Загрузка содержимого

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

Содержимое Flash Player и AIR может загружать различные типы другого содержимого, включая следующие:

  • SWF-файлы;

  • изображения;

  • Sound

  • Видео

  • HTML-файлы (только в AIR);

  • JavaScript (только в AIR).

Загрузка SWF-файлов и изображений с помощью класса Loader

Для загрузки SWF-файлов и изображений (JPG, GIF или PNG) используется класс Loader. Все SWF-файлы, кроме находящихся в локальной изолированной программной среде файловой системы, могут загружать SWF-файлы с любого сетевого домена. Загружать SWF-файлы и изображения из локальной файловой системы могут только SWF-файлы, находящиеся в локальных изолированных программных средах. Однако файлы из локальной изолированной программной среды с сетевым подключением могут загружать только те локальные SWF-файлы, которые находятся в локальной доверенной среде или в локальной среде с сетевым подключением. SWF-файлы из локальной изолированной программной среды с сетевым подключением могут загружать локальное содержимое (например, изображения), кроме SWF-файлов, но не могут получать его данные.

Возможно, при загрузке SWF-файла из ненадежного источника (такого как домен, не являющийся доменом корневого SWF-файла объекта Loader) потребуется определить маску для объекта Loader, чтобы предотвратить отрисовку загруженного содержимого (например, дочернего элемента объекта Loader) в областях рабочей области, находящихся за пределами этой маски, как показано в следующем коде.

import flash.display.*; 
import flash.net.URLRequest; 
var rect:Shape = new Shape(); 
rect.graphics.beginFill(0xFFFFFF); 
rect.graphics.drawRect(0, 0, 100, 100); 
addChild(rect); 
var ldr:Loader = new Loader(); 
ldr.mask = rect; 
var url:String = "http://www.unknown.example.com/content.swf"; 
var urlReq:URLRequest = new URLRequest(url); 
ldr.load(urlReq); 
addChild(ldr);

При вызове метода load() объекта Loader можно указать параметр context, представленный объектом LoaderContext. Класс LoaderContext включает три свойства, которые позволяют определить контекст применения загруженного содержимого.

  • checkPolicyFile: используйте это свойство только при загрузке изображений (не SWF-файлов). Укажите его для графического файла, который находится не в том домене, в котором размещен файл, содержащий объект Loader. Если этому свойству задано значение true, объект Loader проверяет наличие файла политики URL-адресов на исходном сервере (см. раздел Элементы управления веб-сайта (файлы политики)). Если сервер предоставляет доступ домену Loader, код ActionScript из SWF-файлов в домене Loader может получить данные загруженного изображения. Другими словами, свойство Loader.content можно использовать для получения ссылки на объект Bitmap, который представляет загруженное изображение, а метод BitmapData.draw() для получения пикселных данных загруженного изображения.

  • securityDomain: используйте это свойство только при загрузке SWF-файлов (но не изображений). Его следует указывать для SWF-файла из домена, который отличается от домена файла, содержащего объект Loader. В настоящее время свойство securityDomain поддерживает только два значения: null (по умолчанию) и SecurityDomain.currentDomain. Если задать значение SecurityDomain.currentDomain, отправляется запрос на импорт загруженного SWF-файла в изолированную программную среду загружающего SWF-файла, то есть вызываемый файл работает, как если бы он загружался с сервера вызывающего SWF-файла. Это допускается, только если на сервере загружаемого SWF-файла есть файл политики URL-адресов, который позволяет доступ домену загружающего SWF-файла. Если требуемый файл политики найден, загружающий и загружаемый файлы могут выполнять перекрестные сценарии, когда начнется загрузка, так как они оказываются в одной изолированной программной среде. Обратите внимание, что импорт в изолированную программную среду в большинстве случаев можно заменить выполнением обычной загрузки, после которой загруженный SWF-файл должен вызвать метод Security.allowDomain(). Последний метод может быть проще в использовании, так как загруженный SWF-файл будет в своей естественной изолированной программной среде и поэтому будет иметь доступ к ресурсам собственного сервера.

  • applicationDomain: используйте это свойство только при загрузке SWF-файлов, записанных на 3.0 (но не изображений и не SWF-файлов, записанных на ActionScript 1.0 или ActionScript 2.0). Загружая файл, можно указать, что он должен быть помещен в определенный домен приложений, а не в новый домен, являющийся дочерним для домена приложений загружающего SWF-файла (действие по умолчанию). Обратите внимание, что домены приложений являются подразделениями доменов безопасности, и поэтому целевой домен приложения можно указать, только если загружаемый SWF-файл находится в том же домене безопасности, что и загружающий файл: он должен находиться на том же сервере, либо его необходимо импортировать в данный домен безопасности с помощью свойства securityDomain. Если указать домен приложения, в то время как загружаемый SWF-файл находится в другом домене безопасности, свойство applicationDomain игнорируется. Дополнительные сведения см. в разделе «Работа с доменами приложений».

Дополнительные сведения см. в разделе «Указание контекста загрузки».

Важным свойством объекта Loader является свойство contentLoaderInfo, представленное объектом LoaderInfo. В отличие от большинства других объектов, LoaderInfo совместно используется загружающим SWF-файлом и загружаемым содержимым и постоянно доступен для обеих сторон. Когда загружается SWF-файл, он может получить доступ к объекту LoaderInfo через свойство DisplayObject.loaderInfo. Объекты LoaderInfo содержат сведения, такие как прогресс загрузки, URL-адреса загружающего и загружаемого файлов, отношения доверенности между файлами и прочее. Дополнительные сведения см. в разделе «Просмотр хода загрузки».

Загрузка аудио- и видеосодержимого

Любому содержимому, за исключением содержимого в локальной изолированной программной среде файловой системы, разрешено загружать звуковые данные и видеоданные из сетевых источников с помощью методов Sound.load(), NetConnection.connect() и NetStream.play().

Только содержимое в локальной изолированной программной среде файловой системы и изолированной программной среде приложения AIR может загружать мультимедийное содержимое из локальной файловой системы. Только содержимое в локальной изолированной программной среде файловой системы, изолированной программной среде приложения AIR или локальной доверенной изолированной программной среде может получать доступ к данным в этих загруженных файлах.

Существуют также и другие ограничения доступа к данным загруженного мультимедийного содержимого. Дополнительные сведения см. в разделе «Получение данных загруженного мультимедийного содержимого».

Загрузка SWF-файлов и изображений путем добавления тега <img> в текстовое поле

SWF-файлы и растровые изображения можно загружать в текстовые поля с помощью тега <img>, как показано ниже.

<img src = 'filename.jpg' id = 'instanceName' >

Доступ к загруженному таким образом содержимому можно получить с помощью метода getImageReference() экземпляра TextField, как в следующем коде.

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

Однако следует учесть, что SWF-файлы и изображения, загруженные таким образом, помещаются в изолированную программную среду их источника.

Когда графический файл загружается с помощью тега <img> в текстовом поле, доступ к данным изображения можно получить только с помощью файла политики URL-адресов. Чтобы проверить наличие файла политики, следует добавить атрибут checkPolicyFile для тега <img>, как в следующем коде.

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

Если SWF-файл загружается с помощью тега <img> в текстовом поле, доступ к данным этого файла можно открыть, вызвав метод Security.allowDomain().

Когда для загрузки внешнего файла используется тег <img> в текстовом поле (в отличие от использования класса Bitmap, встроенного в SWF-файл), автоматически создается объект Loader, являющийся дочерним для объекта TextField, и внешний файл загружается в экземпляр Loader так же, как при загрузке файла с помощью объекта Loader в ActionScript. В данном случае метод getImageReference() возвращает автоматически созданный объект Loader. Для обращения к этому объекту Loader не требуется проверка безопасности, так как он находится в той же изолированной программной среде, что и вызывающий код.

Однако правила обеспечения безопасности применяются, если для доступа к загруженному мультимедийному содержимому используется ссылка на свойство content объекта Loader. Если содержимое — это изображение, необходимо добавить файл политики URL-адресов, а если это SWF-файл, в его код необходимо добавить вызов метода allowDomain().

Adobe AIR

В изолированной программной среде приложения теги <img> в текстовых полях игнорируются с целью предотвращения атак фишинга. Кроме того, коду, выполняемому в изолированной программной среде приложения, запрещено вызывать метод allowDomain() класса Security.

Содержимое, передаваемое с помощью серверов RTMP

Сервер Flash Media Server использует протокол RTMP (Real-Time Media Protocol) для размещения данных, аудио и видео. Это мультимедийное содержимое можно загрузить с помощью метода connect() класса NetConnection, передав URL-адрес RTMP в качестве параметра. Сервер Flash Media Server может запретить установку подключений и загрузку содержимого в зависимости того, какой домен запрашивает файл. Дополнительные сведения см. в интерактивной документации по Flash Media Server на странице www.adobe.com/go/learn_fms_docs_ru.

Чтобы использовать методы BitmapData.draw() и SoundMixer.computeSpectrum() для извлечения графики и звуковых данных среды выполнения из потоков RTMP, необходимо разрешить доступ на сервере. Используйте свойства Client.videoSampleAccess и Client.audioSampleAccess языка ActionScript для сервера для разрешения доступа к определенным каталогам на сервере Flash Media Server. Дополнительные сведения см. в справочнике по серверному языку ActionScript.