Pregunta

¿Cuál es la diferencia en términos de seguridad entre SWFLoaders declarativos y programáticos? En la ff. código, loader1 lanza una excepción de seguridad, mientras que loader2 no lo hace.

public someFunction(source:String):void
{
  var loader1:SWFLoader = new SWFLoader();
  loader1.load(source);

  loader2.source = source;
}

...

<mx:SWFLoader id="loader2"/>
¿Fue útil?

Solución

No creo que haya ninguna diferencia en términos de seguridad. Recuerde, MXML se convierte en ActionScript mediante el compilador mxmlc antes de que comience la compilación real, por lo que un SWFLoader declarativo (o cualquier otro elemento declarativo, para el caso) es solo una forma abreviada de crear algo. de codificarlo a mano. Puede usar el argumento -compiler.keep-generate-actionscript mxmlc para ver qué tipo de código se genera a partir de su MXML.

Y la razón por la que no ve un error de tiempo de ejecución de la línea loader2.source = source; en ese ejemplo es que, dado que la línea de código anterior invoca un error, la ejecución de esa función se detiene ahí. Intente comentar en la línea en la que llama a loader1.load (source) y verá la siguiente línea lanzar este tipo de SecurityError:

SecurityError: Error #2148: SWF file http://example.com/test.swf cannot access local resource file:///Users/username/Desktop/picture.jpg. Only local-with-filesystem and trusted local SWF files may access local resources.
    at flash.display::Loader/_load()
    at flash.display::Loader/load()
    at mx.controls::SWFLoader/loadContent()
    at mx.controls::SWFLoader/load()
    at mx.controls::SWFLoader/commitProperties()
    at mx.core::UIComponent/validateProperties()
    at mx.managers::LayoutManager/validateProperties()
    at mx.managers::LayoutManager/doPhasedInstantiation()
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at mx.core::UIComponent/callLaterDispatcher2()
    at mx.core::UIComponent/callLaterDispatcher()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top