Содержимое Flash Player и 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()
или
BitmapData.drawWithQuality()
— для получения пикселных данных загруженного изображения. Метод
drawWithQuality
доступен в средах Flash Player 11.3 и AIR 3.3 и более поздних версий.
-
securityDomain
: используйте это свойство только при загрузке SWF-файлов (но не изображений). Его следует указывать для SWF-файла из домена, который отличается от домена файла, содержащего объект Loader. В настоящее время свойство
securityDomain
поддерживает только два значения:
null
(по умолчанию) и
SecurityDomain.currentDomain
. Если задать значение
SecurityDomain.currentDomain
, отправляется запрос на
импорт
загруженного SWF-файла в изолированную программную среду загружающего SWF-файла, то есть вызываемый файл работает, как если бы он загружался с сервера вызывающего SWF-файла. Это допускается, только если на сервере загружаемого SWF-файла есть файл политики URL-адресов, который позволяет доступ домену загружающего SWF-файла. Если требуемый файл политики найден, загружающий и загружаемый файлы могут выполнять перекрестные сценарии, когда начнется загрузка, так как они оказываются в одной изолированной программной среде. Обратите внимание, что импорт в изолированную программную среду в большинстве случаев можно заменить выполнением обычной загрузки, после которой загруженный SWF-файл должен вызвать метод
Security.allowDomain()
. Последний метод может быть проще в использовании, так как загруженный SWF-файл будет в своей естественной изолированной программной среде и поэтому будет иметь доступ к ресурсам собственного сервера.
-
applicationDomain
: используйте это свойство только при загрузке SWF-файлов, написанных на языке ActionScript 3.0 (а не изображений или SWF-файлов, написанных на ActionScript 1.0 или 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()
,
BitmapData.drawWithQuality()
и
SoundMixer.computeSpectrum()
для извлечения графики и звуковых данных среды выполнения из потоков RTMP, необходимо разрешить доступ на сервере. Используйте свойства
Client.videoSampleAccess
и
Client.audioSampleAccess
языка ActionScript для сервера для разрешения доступа к определенным каталогам на сервере Flash Media Server. Дополнительные сведения см. в
справочнике по серверному языку ActionScript
. (Метод
drawWithQuality
доступен в средах Flash Player 11.3 и AIR 3.3 и более поздних версий.)
|
|
|