Flash AS3 Получение нарушения безопасности изолированной программной среды при попытке получить внешний SWF - PullRequest
5 голосов
/ 08 апреля 2011

Привет, я пытаюсь загрузить SWF-файл в мое приложение Flash с другого сервера.Когда я пытаюсь загрузить его на Flash IDE (crl + enter), все работает нормально, но когда я запускаю swf как независимый файл swf или отлаживаю его, я получаю эту ошибку:

SecurityError: Error #2121: Security sandbox violation: LoaderInfo.content: file:///C|/Users/something/Desktop/blablabla/myplayer.swf cannot access http://www.somedomain.com/blablabla/lalalala/abc.swf. This may be worked around by calling Security.allowDomain.
at flash.display::LoaderInfo/get content()
at wallplayer_fla::MainTimeline/swfLoaded()[wallplayer_fla.MainTimeline::frame1:216]
Cannot display source code at this location.

У меня есть файл crossdomain.xml в корне моего сервера:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-access-from domain="*" />
</cross-domain-policy>

В "myplayer.swf" у меня есть:

Security.allowDomain("*");
Security.allowInsecureDomain("*");
...
...
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;
loaderContext.allowCodeImport = true;

ldr = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded);
ldr.load(new URLRequest(graySwfFilename), loaderContext);
...
...
var mcExt;
var ldr:Loader;
function swfLoaded(e:Event):void {
    mcExt = MovieClip(ldr.contentLoaderInfo.content);
    ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, swfLoaded);
    mcExt.x = 0;
    mcExt.y = 0;
    addChild(mcExt);
}

Я действительно не знаю, что делатьпожалуйста ... ПОМОГИТЕ?

Ответы [ 3 ]

9 голосов
/ 01 марта 2012

Решение: для Flex 4.x (в настоящее время 4.6) и AS3 в Flash Builder:

    import flash.system.SecurityDomain;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;
    var loaderContext:LoaderContext = new LoaderContext();
    loaderContext.applicationDomain = ApplicationDomain.currentDomain;
    loaderContext.securityDomain = SecurityDomain.currentDomain; // Sets the security 

контекст для устранения ошибки # 2121

... теперь загрузите ваш SWF с

loader.load(new URLRequest(webServerWebURL),loaderContext);
1 голос
/ 08 апреля 2011

Добавьте свою рабочую папку на панель «Глобальные параметры безопасности».Это позволяет загружать внешние файлы из одного SWF-файла в вашей файловой системе.То же самое, если вы хотите, чтобы a.swf загружал b.swf, даже если они находятся в одной папке.

Это позволит вашему SWF читать другие внешние файлы.

Это не должно быть проблемой, если вы загрузите SWF на сервер.

0 голосов
/ 08 октября 2011

Ваша ошибка связана с внешним местоположением, в котором отсутствует файл кросс-домена, а не вы. Ознакомьтесь с этим руководством на , используя файл моста для связи с внешним API . Я использовал as3 и php в этом примере. Хитрость заключается в том, чтобы сохранить контроль над междоменным файлом в вашем домене. Затем позвольте вашему серверу взаимодействовать с API.

...