![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте коллеги.
Есть совсем детский как по мне вопрос доступности классов из подгружаемых SWF к загрузчикам. В обратном порядке все работает но в подгружаемом клипе не могу получить parent. Выдает ошибку безопасности. Установки и не дают нужного результата. Вот как я реализовываю передачу из загрузчика в загружаемый объект. Загрузчик (кто будет проверять код на сцену добавите текстовое поле с именем output) package { import flash.net.*; import flash.display.*; import flash.events.*; import flash.filters.*; import flash.geom.*; import flash.external.ExternalInterface; import flash.utils.Timer; public class Preloader extends MovieClip { public var _loader:Loader; private var cache:Object = new Object(); public function Preloader() { addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); // готовим переменные к передаче cache.appData = new Object(); cache.appData.p1 = 0; cache.appData.p2 = 1; // инициализация загрузки load("http://cite.com/test.swf?"+Math.random()); } public function load(urlMain:String):void { // загрузка клипа var url:URLRequest=new URLRequest(urlMain); _loader = new Loader(); _loader.load(url); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete); _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoading); } private function onLoading(e:ProgressEvent):void { // процесс загрузки output.text = "Loading... "+e.bytesLoaded+" / "+e.bytesTotal; } private function onComplete(e:Event):void { // конец загрузки аттачим клип на сцену addChild(e.currentTarget.content); var mc:MovieClip = e.currentTarget.content as MovieClip; mc.setParam(cache.appData); // передаём в клип } } } package { import flash.display.MovieClip; import flash.events.Event; import flash.system.Security; public class test extends MovieClip { private var wrapper:MovieClip = new MovieClip(); public function test() { addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { Security.allowDomain("*"); removeEventListener(Event.ADDED_TO_STAGE, init); // получаем линк на загрузчик wrapper = MovieClip(parent.parent); output.appendText("init\n"); for ( var prop in wrapper ) { output.appendText(prop+" >> "+wrapper[prop]+"\n"); } } public function setParam(data:Object):void { output.appendText("setParam\n"); for ( var prop in data ) { output.appendText(prop+" >> "+data[prop]+"\n"); } } } } *** Нарушение безопасности изолированной среды *** SecurityDomain "http://cite.com/test.swf?0.25371037563309073" пытался получить доступ к несовместимому контексту "file:///D|/workset/FlashIDE/fs/loader.swf" SecurityError: Error #2047: Нарушение изолированной среды: parent: http://cite.com/test.swf?0.25371037563309073 не может осуществить доступ к file:///D|/workset/Новая%20папка/fs/loader.swf.
__________________
return this... |
|
|||||
|
понял. Тесты проводить в одном домене. Правда пришла в голову мысль, что если вешать лиснер на подгружаемый клип и диспатчить ивент (обходя прямой вызов). Тем самым сообщая из подгружаемого клипа запрашиваемые параметры??
Добавлено через 59 минут Диспатчить Ивенты решило вопрос)
__________________
return this... Последний раз редактировалось AlexCooper; 13.10.2012 в 12:44. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|