声明性和程序化SWFLoader

时间:2008-10-25 04:06:58

标签: flex swfloader

声明性和程序化SWFLoader之间的安全性有何不同?在ff。代码,loader1抛出安全异常,而loader2则没有。

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

  loader2.source = source;
}

...

<mx:SWFLoader id="loader2"/>

1 个答案:

答案 0 :(得分:1)

我认为在安全方面没有任何区别。请记住,在实际编译开始之前,MXML会被 mxmlc 编译器转换为ActionScript,因此声明性的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()