Если два SWF-файла, написанные на ActionScript 3.0, или два HTML-файла, выполняемых в AIR, размещены на одном домене (например, URL-адрес одного SWF-файла — http://www.example.com/swfA.swf, а другого http://www.example.com/swfB.swf), то код, определенный в одном файле может анализировать и изменять переменные, объекты, свойства, методы и прочее другого файла и наоборот. Это называется
перекрестным выполнением сценариев
.
Если два файла находятся в разных доменах, например http://siteA.com/swfA.swf и http://siteB.com/swfB.swf, то по умолчанию Flash Player или AIR не позволяет swfA.swf выполнять сценарии, связанные с swfB.swf, и наоборот. SWF-файл предоставляет доступ к SWF-файлам из других доменов путем вызова
Security.allowDomain()
. Вызывая метод
Security.allowDomain("siteA.com")
, файл swfB.swf дает разрешение на выполнение сценариев SWF-файлам с домена siteA.com.
Перекрестное выполнение сценариев не поддерживается между SWF-файлами версии AVM1 и SWF-файлами версии AVM2. SWF-файлы версии AVM1 созданы с использованием ActionScript 1.0 или ActionScript 2.0. (AVM1 и AVM2 — это сокращения от ActionScript Virtual Machine (виртуальная машина ActionScript). Тем не менее, для обмена данными между файлами версий AVM1 и AVM2 можно использовать класс LocalConnection.
В любой ситуации междоменного выполнения сценариев важно иметь четкое представление о двух участвующих в нем сторонах. В рамках данного обсуждения сторона, выполняющая перекрестный сценарий, называется
вызывающей стороной
(обычно это вызывающий SWF-файл), а вторая сторона называется
вызываемой стороной
(обычно это вызываемый SWF-файл). Когда файл siteA.swf выполняет сценарий для siteB.swf, siteA.swf является вызывающей стороной, а siteB.swf — вызываемой, как показано на следующей схеме.
Междоменные разрешения, получаемые с помощью метода
Security.allowDomain()
, не являются симметричными. В предыдущем примере файл siteA.swf может выполнять сценарии для файла siteB.swf, но файл siteB.swf не может выполнять сценарии для файла siteA.swf, так как файл siteA.swf не вызвал метод
Security.allowDomain()
, чтобы разрешить выполнение сценариев SWF-файлами из домена siteB.com. Чтобы настроить симметричные разрешения, метод
Security.allowDomain()
должны вызвать оба SWF-файла.
Проигрыватель Flash Player защищает SWF-файлы от перекрестного выполнения сценариев не только с другими SWF-файлами, но и с HTML-файлами. Выполнение сценариев HTML-файла для SWF-файла может происходить при установке обратного вызова с помощью метода
ExternalInterface.addCallback()
. Когда HTML-файл выполняет сценарии для SWF-файла в другом домене, вызываемый SWF-файл должен вызвать метод
Security.allowDomain()
, как и в том случае, когда вызывающей стороной является SWF-файл, иначе операция завершится ошибкой. Дополнительные сведения см. в разделе «
Элементы управления автора (разработчика)
».
Кроме того, в проигрывателе Flash Player предусмотрены элементы управления безопасностью при выполнении сценариев SWF-файлом для HTML-файла. Дополнительные сведения см. в разделе «
Управление доступом к внешним URL-адресам
.
Безопасность рабочей области
Некоторые свойства и методы объекта Stage доступны для всех спрайтов или фрагментов ролика, добавленных в список отображения.
Однако объект Stage имеет владельца, которым является первый загруженный SWF-файл. Следующие свойства и методы объекта Stage по умолчанию доступны только тем SWF-файлам, которые находятся в той же изолированной программной среде, что и владелец рабочей области.
Свойства
|
Методы
|
align
|
addChild()
|
displayState
|
addChildAt()
|
frameRate
|
addEventListener()
|
height
|
dispatchEvent()
|
mouseChildren
|
hasEventListener()
|
numChildren
|
setChildIndex()
|
quality
|
willTrigger()
|
scaleMode
|
|
showDefaultContextMenu
|
|
stageFocusRect
|
|
stageHeight
|
|
stageWidth
|
|
tabChildren
|
|
textSnapshot
|
|
width
|
|
Чтобы SWF-файл из другой изолированной программной среды мог получить доступ к этим свойствам и методам, SWF-файл, являющийся владельцем рабочей области, должен вызвать метод
Security.allowDomain()
, чтобы разрешить доступ для домена из внешней изолированной программной среды. Дополнительные сведения см. в разделе «
Элементы управления автора (разработчика)
».
Свойство
frameRate
является исключением. Значение
frameRate
может считывать любой SWF-файл. Однако изменить это свойство могут только файлы, находящиеся в той же изолированной программной среде, что и владелец рабочей области (или те, которые получили доступ благодаря вызову метода
Security.allowDomain()
).
Также существуют ограничения по использованию методов
removeChildAt()
и
swapChildrenAt()
объекта Stage, но они отличаются от остальных ограничений. В данном случае, чтобы получить возможность вызывать эти методы, код должен находиться в одном домене с владельцем не рабочей области, а затрагиваемых дочерних объектов, либо эти дочерние объекты должны вызвать метод
Security.allowDomain()
.
Обход списка отображения
Доступ SWF-файла к экранным объектам, загруженным из других изолированных программных сред, ограничен. Чтобы SWF-файл мог получить доступ к экранному объекту, созданному SWF-файлом из другой изолированной программной среды, вызываемый SWF-файл должен разрешить доступ домену вызывающего SWF-файла с помощью метода
Security.allowDomain()
. Дополнительные сведения см. в разделе «
Элементы управления автора (разработчика)
».
Чтобы можно было получить доступ к объекту Bitmap, загруженному объектом Loader, на исходном сервере графического файла должен быть файл политики для URL, разрешающий домен SWF-файла, который пытается получить объект Bitmap (см. раздел
Элементы управления веб-сайта (файлы политики)
).
Объект LoaderInfo, соответствующий загруженному файлу (и объекту Loader), имеет следующие три свойства, определяющие отношения между загруженным объектом и объектом Loader:
childAllowsParent
,
parentAllowsChild
и
sameDomain
.
Безопасность событий
В целях безопасности доступ к событиям, связанным со списком отображения, ограничен в зависимости от того, в какой изолированной программной среде находится экранный объект, отправляющий событие. События в списке отображения проходят стадии восходящей маршрутизации и захвата (см. описание в разделе
Обработка событий
). Проходя фазы восходящей маршрутизации и захвата, событие проходит путь от исходного экранного объекта вверх по цепочке родительских экранных объектов в списке отображения. Если родительский объект и исходный экранный объект находятся в разных изолированных программных средах, фазы восходящей маршрутизации и захвата завершаются, не доходя до родительского объекта, если между владельцами родительского и исходного объектов не установлены доверительные отношения. Взаимное доверие можно установить, выполнив следующие действия.
-
SWF-файл, который является владельцем родительского объекта, должен вызвать метод
Security.allowDomain()
, чтобы указать в качестве доверенного домен SWF-файла, который является владельцем исходного объекта.
-
SWF-файл, который является владельцем исходного объекта, должен вызвать метод
Security.allowDomain()
, чтобы указать в качестве доверенного домен SWF-файла, который является владельцем родительского объекта.
Объект LoaderInfo, соответствующий загруженному файлу (и объекту Loader), имеет следующие два свойства, определяющие отношения между загруженным объектом и объектом Loader:
childAllowsParent
и
parentAllowsChild
.
Для событий, отправляемых не экранными объектами, нет таких ограничений по безопасности.
|
|
|