Pergunta

Qual é a diferença em termos de segurança entre SWFLoaders declarativos e programáticos? No ff. código, loader1 lança uma exceção de segurança, enquanto loader2 não.

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

  loader2.source = source;
}

...

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

Solução

Eu não acho que haja qualquer diferença em termos de segurança. Lembre-se, MXML é convertido em ActionScript pela mxmlc compilador antes dos Começa compilação reais, assim que um SWFLoader declarativa (ou qualquer outro elemento declarativo, para que o assunto) é apenas uma forma abreviada de criar algo em vez de codificá-lo com a mão. Você pode usar o argumento -compiler.keep-generated-actionscript mxmlc para ver que tipo de código é gerada a partir de seu MXML.

E a razão que você não está vendo um erro de execução da linha loader2.source = source; nesse exemplo é que, desde a linha de código anterior invoca um erro, a execução dessa função pára por aí. Tente comentar a linha onde você chamar loader1.load(source) e você verá a próxima linha jogar 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top