沙箱违规 - 在Flash播放器中 - 跨域问题?

时间:2009-08-28 06:05:56

标签: flash

我想知道是否有人解决了类似的问题。

我在网站A上有一个网页,它有一个从网站B提供的嵌入式swf。 当通过站点B上的文件夹中的URLLoader尝试txt文件时,swf会出现安全沙箱错误。

我在site-B上有一个跨域策略(目前设置为)。 我在这里错过了什么?我在哪里可以放置文本文件以便swf可以加载它? 我可以访问A站点和B站点。

任何帮助非常感谢

1 个答案:

答案 0 :(得分:1)

这取决于你如何编译swf。有一个安全Sanbox问题。在Essential Actionscript 3.0中有一整章关于安全性,但我会尽量保持简短。

使用Flash IDE,您有两个“安全选项” 你的swf有权在本地加载剪辑(来自同一个域), 来自网络(其他领域)

假设swfA是网站上的swf,而swfB是网站上的swf-B

首先,尝试将LoaderContext设置为用于swfB的加载器

e.g。

//1st param(true) in LoaderContext constructor means always check for policy files 
var swfBLoaderContext:LoaderContext = new LoaderContext(true);
var swfBLoader:Loader = new Loader();
swfBLoader.contentLoaderInfo.addEventListener(Event.INIT, swfBLoaded);
swfBLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, swfBIOError);
swfBLoader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, swfBSecurityError);

swfBLoader.load(new URLRequest('http://siteb.com/b.swf',swfBLoaderContext);

function swfBLoaded(event:Event):void{
    trace(event.target.content);
}
function swfBIOError(event:IOErrorEvent):void{
    trace(event);
}
function swfBSecurityError(event:SecurityErrorEvent):void{
    trace(event);
}

然后在“文档设置”中更改本地播放安全性以访问网络文件。

alt text http://www.adobe.com/devnet/flash/articles/local_network_playback/fig01.jpg

感谢Adobe的图片。

有关详细信息,请参阅this article on devnet

古德勒克。