SecurityError:错误#2000:导入外部swf文件时没有活动的安全上下文

时间:2012-01-25 14:46:11

标签: flash actionscript-3

我正在尝试使用actionscript 3在flash professional cs5.5内的时间轴的第25帧上加载包含基于xml的图库的swf文件,同时这样做我收到此错误“SecurityError:Error#2000:No主动安全背景“。下面是as3代码:

stop();

import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;

function startLoad() { 
    var mLoader:Loader = new Loader();
    var mRequest:URLRequest = new URLRequest("../xml_gallery_2_852/XMLGALLERY2.swf");
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest);
} 

function onCompleteHandler(loadEvent:Event) {
    addChild(loadEvent.currentTarget.content);
} 

function onProgressHandler(mProgress:ProgressEvent) {
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;        
    trace(percent); 
}

startLoad();

2 个答案:

答案 0 :(得分:4)

当应用程序运行的安全沙箱不允许操作时,抛出安全错误。这可能有几个原因 - 其中最重要的原因是尝试从使用{{编译的应用程序访问本地文件1}}。

修改

重新阅读您的问题我遇到了最可能的原因,但无论如何我会留下其他信息 - 这对其他用户可能有用。

您正在加载图片库,依次加载其他文件(XML),但外部SWF使用use-network=true选项进行编译,而您的FLA自动运行为{{从Flash IDE导出时的应用程序。这当然是违反沙箱的行为。

您可以通过从具有有效安全策略的Web服务器启动SWF来测试此问题 - 如果我认为正确,那么您的应用应该可以正常工作。

顺便说一句,如果您向use-network添加事件监听器来处理安全错误,则可以防止您的应用崩溃并正常退出。

结束编辑

错误可能与加载器实例化和安全上下文初始化之间的短暂延迟有关。有关详细信息,请参阅this blog post

如果这是真的,你应该能够通过使用local-trusted延迟加载请求或将加载器的声明移到功能块之外来正确地消除错误,即:

contentLoaderInfo

无论如何,将加载器声明为临时变量是“脏”的:引用会丢失,但是您添加到setTimeout()的事件侦听器会将其保留在内存中,无论是否仍然需要它。如果您要加载多个文件,这可能会导致严重的内存泄漏。如果要在不再需要时(通过使用var mLoader:Loader = new Loader(); function startLoad() { var mRequest:URLRequest = new URLRequest("../xml_gallery_2_852/XMLGALLERY2.swf"); mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); mLoader.load(mRequest); } )正确处理已加载的内容,并且使加载程序本身可用于垃圾收集(通过删除事件侦听器),则应始终保留对加载程序的引用。并在使用后明确设置对contentLoaderInfo的引用。

答案 1 :(得分:0)

这是一个老线程,似乎已经得到了回答,但还有另一个明显的解决方案(这可能会或可能没有帮助)。

我本可以用这个答案来救我一些悲伤(我自己也经历了这个)。

我正在通过Loader类加载图像并继续收到这个神秘的消息(我说这些内容并不能帮助我找出问题) - SecurityError:错误#2000:没有活动的安全上下文

解决方案 - 使用源的正确路径。我更改了目录名,忘了更新我的代码。

所以,我在URLRequest中调用了“src / pics / image01.png”...我已经将“pics”目录更改为“img”但是应该调用“src / img / image01.png”代替。

如果您收到“错误#2000”消息请仔细检查您的路径并确保该文件存在,然后再进行其他操作。