2011-04-08 21 views
5

Hii, Estoy intentando cargar el archivo SWF en la aplicación flash desde un servidor diferente. Cuando trato de cargarlo en Flash IDE (CRL + enter) todo funciona bien, pero cuando corro el swf como un archivo SWF independiente o mediante la depuración, lo estoy consiguiendo este error:Flash AS3 Obtención de una violación de la zona de pruebas de seguridad al intentar recuperar un archivo SWF externo

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. 

tengo el archivo crossdomain.xml en la raíz de mi servidor:

<?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> 

en "myplayer.swf" tengo:

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); 
} 

realmente no sé qué hacer ... Por favor, ¿AYUDA?

Respuesta

9

Solución: para 4.x Flex (Actualmente 4.6) y AS3 en 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 

contexto para resolver un error # 2121

... Ahora carga el archivo SWF con

loader.load(new URLRequest(webServerWebURL),loaderContext); 
1

Agregue su carpeta de trabajo en el panel Configuración de seguridad global. Esto le permite cargar archivos externos desde un único archivo SWF en su sistema de archivos. Es lo mismo si quieres que a.swf cargue b.swf aunque estén ubicados en la misma carpeta.

Esto permitirá a su SWF para leer archivos externos.

Esto no debería ser un problema si sube su SWF a un servidor.

+0

¡GUAU! ¡Gracias hombre! Pero va a solucionar el problema solo en mi computadora. Si voy a subir este reproductor a algún sitio a través de Internet, no lo arreglará ... ¿no? – hdmi3killer

+0

¿Puedo obtener los mismos resultados al implementar myplayer.swf en un sitio web? – hdmi3killer

+0

@ hdmi3killer swf tiene restricciones de carga locales a globales. Una vez en un servidor, estas restricciones no afectan a la carga de – jolyonruss

0

Su error proviene de la ubicación externa que no tiene un archivo de dominio cruzado, usted no. Consulte este tutorial en using a bridge file to communicate with an external api. Usé as3 y php en este ejemplo. El truco consiste en mantener el control del archivo de dominio cruzado en su dominio. Luego, deje que su servidor se comunique con la API.

Cuestiones relacionadas