Руководство по actionscript. часть 2, стр. 072
Подробную информацию о. методе allowDomain() и безопасности приложения Flash Player м$ j * можно найти в разд. «Разрешения создателя (allowDomain())» гл. 19.
Стоит отметить, что вызов метода а 11 о wDoma i n ( ) позволяет не только обрабатывать события между границами зон безопасности: все SWF-файлы из разрешенного домена получают возможность осуществлять кросс-скриптинг над SWF-файлом, в котором был вызван метод allowDomain ( ). Однако существует альтернатива всеобъемлющим разрешениям, выдаваемым методом allowDomain ( ).
Альтернатива методу allowDomain( ): разделяемые события
В некоторых случаях SWF-файлы из различных доменов могут пожелать совместно использовать события, не предоставляя при этом всех полномочий для кросс-скриптинга. Для решения подобных проблем приложение Flash Player предоставляет переменную экземпляра sharedEvents класса Loaderlnf о. Переменная sharedEvents — это простой нейтральный объект, через который два SWF-файла могут отправлять события друг другу, независимо от ограничений, обусловленных требованиями безопасности. Этот подход позволяет осуществлять взаимодействие между SWF-файлами, основанное на событиях, не отменяя требований безопасности, но для его реализации требуется написание большего объема кода, чем при использовании альтернативного подхода с методом allowDomain ( ).
Рассмотрим применение переменной sharedEvents на примере. Предположим, что Томми основал компанию по производству фейерверков и создал рекламный сайт www. blast. ca с использованием технологии Flash. Томми нанял подрядчика Дерека для создания отдельного элемента, реализующего эффект, который заключается в хаотичной генерации анимированных взрывов фейерверков под указателем мыши. Дерек создает SWF-файл MouseEf fect. swf, в котором реализован этот эффект, и размещает его по адресу www. dereksflasheffects. com/MouseEffect. swf. Дерек говорит Гомми загрузить файл MouseEf f ect. swf в его приложение www. blast. ca/BlastSite. swf. Церек и Томми согласились, что файл MouseEf feet. swf должен размещаться на :ервере www. derekflasheffects. com, что в дальнейшем позволит Дереку легко обновлять данный файл, не внося при этом никаких изменений в сайт Томми.
Гомми просит Дерека изменить файл MouseEf feet. swf таким образом, чтобы генерация взрывов прекращалась в тот момент, когда указатель мыши покидает об-1асть отображения приложения Flash Player. Дерек считает эту идею целесообраз-¦юй и приступает к написанию соответствующего кода. В обычной ситуации, чтобы шределить выход указателя мыши за пределы области отображения приложения Flash Player, код в файле MouseEf feet. swf должен зарегистрировать приемник * экземпляре Stage для событий Event. MOUSE_LEAVE. Однако, поскольку фай-ты MouseEf feet. swf и BlastSite. swf размещены в разных доменах, файл MouseEf feet. swf не имеет доступа к экземпляру Stage. Томми решает, что
вместо того, чтобы предоставлять файлу MouseEf feet. swf полный доступ к файлу BlastSite. swf, он просто переадресует все события Event. MOUSE_LEAVE файлу MouseEf feet. swf через переменную sharedEvents.
Листинг 12.6 демонстрирует код файла BlastSite. swf, относящийся к переадресации событий.
Листинг 12.6. Переадресация события через переменную sharedEvents
package { import flash. display.*; import flash. net.*; import flash. events.*; import flash. system.*;
public class BlastSite extends Sprite { private var loader:Loader;
public function BlastSite ( ) { // Загружаем файл MouseEffeet. swf loader = new Loader( ); loader. load(
new URLRequest(«http://www. dereksf1asheffects. com/MouseEffect. swf»)); addChild(loader);
// Регистрируем приемник для событий Event. MOUSE_LEAVE
stage. addEventLi stener(Event. MOUSE_LEAVE. mouseLeaveLi stener);
}
// Когда возникает событие Event. MOUSELEAVE…. private function mouseLeaveListener (e:Event):void {
// …переадресуем его файлу MouseEffeet. swf
1oader. contentLoaderlnfо. sharedEvents. di spatchEvent(e);
}
}
}
Листинг 12.7 демонстрирует код файла MouseEf feet. swf, относящийся к обра ботке событий.