我正在尝试使用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();
答案 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”消息请仔细检查您的路径并确保该文件存在,然后再进行其他操作。