Сведения о вопросе

Pytdev

01:46, 1st August, 2020

Теги

Как вызвать Flex SWF из удаленного домена с помощью Flash (AS3)?

Просмотров: 527   Ответов: 3

У меня есть Flex swf, размещенный в http://www.a.com/a.swf . У меня есть код flash на другом doamin, который пытается загрузить SWF:

_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);

На событии onLoaderFinish я пытаюсь загрузить классы из удаленного SWF и создать их:

_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class

Когда этот код выполняется, я получаю следующее исключение

SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf.
    at flash.display::LoaderInfo/get applicationDomain()
    at NuconomyLoader/onLoaderFinish()

Есть ли способ заставить этот код работать?



  Сведения об ответе

LIZA

21:19, 23rd August, 2020

Все это описано в разделе Adobe Flex 3 Программирование ActionScript 3 PDF на стр. 550 (Глава 27: Flash безопасность игрока / Кросс-скриптинг):

Если два файла SWF, записанные с ActionScript 3.0, обслуживаются из разных доменов—например, http://siteA.com/swfA.swf и http://siteB.com/swfB.swf — - то по умолчанию Flash Player не позволяет swfA.swf писать сценарий swfB.swf, а swfB.swf-сценарий swfA.swf. SWF-файл дает разрешение для SWF файлов из других доменов, вызывая Security.allowDomain(). Вызывая Security.allowDomain("siteA.com"), swfB.swf дает SWF файлам из siteA.com разрешение на его написание.

Он идет дальше в некоторых более подробных деталях, с диаграммами и всем остальным.


  Сведения об ответе

ЯЯ__4

17:44, 26th August, 2020

Вам понадобится файл политики crossdomain.xml на сервере, который содержит загружаемый файл, он должен выглядеть примерно так:

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="www.friendOfFoo.com" />
  <allow-access-from domain="*.foo.com" />
  <allow-access-from domain="105.216.0.40" />
</cross-domain-policy>

Поместите его как crossdomain.xml в корень домена, из которого вы загружаете.

Также нужно настроить загрузчик на чтение этого файла как такового:

var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete );
loader.load( new URLRequest( "http://my.domain.com/image.png" ), loaderContext );

пример кода yoinked от http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/


  Сведения об ответе

P_S_S

09:50, 18th August, 2020

Может быть System.Security.allowDomain - это то, что вам нужно?


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться