ForhaxeD
@ForhaxeD

@%#$! политика безопасности Flash-плеера и не только?

Привет хабралюди.

Помогите решить проблему, бьюсь уже часа три, не меньше.

Что хочу сделать?

Хочу сделать некий wrapper.

Т.е. флешка грузит еще одну флешку внутрь себя, далее идет работа с подгруженной флешкой (addChild, интерактив).




Использую следующий код в wrapper'е:

public function Main():void <br/>
{<br/>
 if (stage) init();<br/>
 else this.addEventListener(Event.ADDED_TO_STAGE, init);<br/>
}<br/>
 <br/>
public function init(event:Event = null):void<br/>
{<br/>
 this.removeEventListener(Event.ADDED_TO_STAGE, init);<br/>
 <br/>
 stage.dispatchEvent(new Event(Event.DEACTIVATE)); <br/>
 stage.dispatchEvent(new Event(Event.ACTIVATE));<br/>
 <br/>
<br/>
loadExeption();<br/>
}<br/>
 <br/>
public function loadExeption():void<br/>
{<br/>
 <br/>
 Security.allowDomain(&quot;*&quot;); <br/>
 Security.allowInsecureDomain(&quot;*&quot;);<br/>
<br/>
loaderContext = new LoaderContext();<br/>
 loaderContext.checkPolicyFile = true;<br/>
 <br/>
 if (Security.sandboxType != 'localTrusted') <br/>
 {<br/>
 loaderContext.applicationDomain = ApplicationDomain.currentDomain;<br/>
 loaderContext.securityDomain = SecurityDomain.currentDomain;<br/>
 }<br/>
 <br/>
 m_loader = new Loader();<br/>
 m_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);<br/>
<br/>
m_loader.load(new URLRequest(&quot;xxx.ru/my.swf&quot;), loaderContext);<br/>
 }<br/>
<br/>
public function onCompleteHandler(e:Event):void<br/>
{<br/>
 addChild(m_loader);<br/>
}



Вроде все правильно, ошибок при компиляции нет, realtime ошибок тоже.

А что не так?

А не так то, что это все не работает. После запуска такого кода флеш начинает жестоко личить в память, и складывается ощущение, что он загружает сам себя.



Адрес wrapper'a (Preloader'a): xxx.ru/preloader.swf (условно).

Адрес подгружаемой swf-шки: xxx.ru/my.swf (условно).


Лежат на одном домене, с ними рядом лежит:

crossdomain.xml, листинг:

&lt;cross-domain-policy&gt;<br/>
&lt;site-control permitted-cross-domain-policies=&quot;master-only&quot;/&gt;<br/>
&lt;allow-http-request-headers-from domain=&quot;xxx.ru&quot; headers=&quot;*&quot;/&gt;<br/>
&lt;allow-access-from domain=&quot;xxx.ru&quot; to-ports=&quot;80&quot;/&gt;<br/>
&lt;/cross-domain-policy&gt;



Использую swfobject.js, в index.html (index.php) кусок кода, ответственный за флешку:
...<br/>
 var params = {<br/>
 menu: &quot;false&quot;,<br/>
 scale: &quot;noScale&quot;,<br/>
 allowFullscreen: &quot;true&quot;,<br/>
 allowScriptAccess: &quot;always&quot;,<br/>
 allowNetworking: &quot;always&quot;,<br/>
 bgcolor: &quot;#000000&quot;<br/>
 };<br/>
 ...<br/>
 swfobject.embedSWF(&quot;preloader.swf&quot;, &quot;altContent&quot;, &quot;600&quot;, &quot;580&quot;, &quot;10.0.0&quot;, &quot;expressInstall.swf&quot;, flashvars, params, attributes);<br/>



У второй флешки есть событие added_to_stage, костыль с активацией/деактивацией.


Самое интересное, что локально это все работает нормально.

Т.е. заливаю на хостинг my.swf, локально компилирую preloader.swf — работает на ура. Как стоит мне залить preloader.swf на хостинг, то возникает такая ситуация. Сталкивался кто?
  • Вопрос задан
  • 2907 просмотров
Решения вопроса 1
ForhaxeD
@ForhaxeD Автор вопроса
Собственно сам нашел решение.

Решение:

Главный класс подгружаемой флешки должен быть отличен от главного класса wrapper'a. В моем случае это было Main<->Main. Собственно такие глюки и были.
Стоило поменять на Wrapper<->Main, как все заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы