Декларативные и программные SWFLoaders - PullRequest
1 голос
/ 25 октября 2008

В чем разница с точки зрения безопасности между декларативным и программным SWFLoaders? В фф. код, loader1 генерирует исключение безопасности, а loader2 - нет.

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

  loader2.source = source;
}

...

<mx:SWFLoader id="loader2"/>

1 Ответ

1 голос
/ 29 октября 2008

Я не думаю, что есть какая-то разница с точки зрения безопасности. Помните, что MXML преобразуется в ActionScript компилятором mxmlc до начала фактической компиляции, поэтому декларативный SWFLoader (или любой другой декларативный элемент в этом отношении) является всего лишь кратким способом создания чего-то вместо кодирую это от руки. Вы можете использовать аргумент -compiler.keep-generated-actionscript mxmlc, чтобы увидеть, какой код генерируется из вашего MXML.

И причина, по которой вы не видите ошибку времени выполнения из строки loader2.source = source; в этом примере, состоит в том, что, поскольку предыдущая строка кода вызывает ошибку, выполнение этой функции на этом останавливается. Попробуйте закомментировать строку, где вы вызываете loader1.load(source), и вы увидите, что следующая строка выдаст ошибку 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()
...