1

声明式和程序式 SWFLoader 在安全性方面有何区别?在 ff. 代码中,loader1 会引发安全异常,而 loader2 不会。

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

  loader2.source = source;
}

...

<mx:SWFLoader id="loader2"/>
4

1 回答 1

1

我认为在安全性方面没有任何区别。请记住,在实际编译开始之前, mxmlc编译器会将MXML 转换为 ActionScript ,因此声明性 SWFLoader(或任何其他声明性元素,就此而言)只是创建内容的一种简便方法,而不是手动编码。您可以使用-compiler.keep-generated-actionscriptmxmlc 参数查看从您的 MXML 生成的代码类型。

在该示例的行中您没有看到运行时错误的原因loader2.source = source;是,由于前一行代码调用了一个错误,因此该函数的执行将停在那里。尝试注释掉你调用的那一行,loader1.load(source)你会看到下一行抛出这种安全错误:

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()
于 2008-10-28T21:06:56.303 回答