Domanda

Qual è la differenza in termini di sicurezza tra SWFLoader dichiarativi e programmatici? Nel ff. codice, loader1 genera un'eccezione di sicurezza mentre loader2 no.

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

  loader2.source = source;
}

...

<mx:SWFLoader id="loader2"/>
È stato utile?

Soluzione

Non credo ci sia alcuna differenza in termini di sicurezza. Ricorda, MXML viene convertito in ActionScript dal compilatore mxmlc prima che inizi la compilazione effettiva, quindi un SWFLoader dichiarativo (o qualsiasi altro elemento dichiarativo, per quella materia) è solo un modo breve di creare qualcosa invece di codificarlo a mano. Puoi utilizzare l'argomento mxmlc -compiler.keep-generated-actionscript per vedere quale tipo di codice viene generato dal tuo MXML.

E il motivo per cui non vedi un errore di runtime dalla riga loader2.source = source; in questo esempio è che poiché la precedente riga di codice richiama un errore, l'esecuzione di quella funzione si ferma qui. Prova a commentare la riga in cui chiami loader1.load (sorgente) e vedrai la riga successiva lanciare questo tipo di 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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top