我在Facebook上制作游戏排行榜。我没有使用连接但在画布内工作。当我尝试从Facebook加载图像时,它会给我以下错误。
SecurityError: Error #2122: Security sandbox violation: Loader.content: http://test cannot access http://profile.ak.fbcdn.net/v22941/254/15/q652310588_2173.jpg A policy file is required, but the checkPolicyFile flag was not set when this media was loaded.
这是我的加载程序代码
public var preLoader:Loader;
preLoader=new Loader();
**update**
Security.loadPolicyFile('http://api.facebook.com/crossdomain.xml');
Security.allowDomain('http://profile.ak.fbcdn.net');
Security.allowInsecureDomain('http://profile.ak.fbcdn.net');
**update-end**
public function imageContainer(Imagewidth:Number,Imageheight:Number,url:String,path:String) {
preLoader=new Loader();
Security.loadPolicyFile("http://api.facebook.com/crossdomain.xml");
var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;
context.applicationDomain = ApplicationDomain.currentDomain;
preLoader.load(new URLRequest(path),context);
任何想法?我正在导入正确的课程。
更新 我正在加载来自不同域的图片说,调用func http://fahim.com图片来自http://profile.ak.fbcdn.net/v22941/254/15/q652310588_2173.jpg的东西(我已经确定图片是静态的,不需要Facebook登录或任何东西,他们只是用户公开个人资料图片)
答案 0 :(得分:9)
这是图片政策文件的网址:
Security.loadPolicyFile('https://fbcdn-profile-a.akamaihd.net/crossdomain.xml');
有了这条线,一切都应该可以正常工作。
答案 1 :(得分:3)
var loaderContext:LoaderContext;
loaderContext= new LoaderContext();
loaderContext.securityDomain=SecurityDomain.currentDomain;
loaderContext.checkPolicyFile = true;
..然后在调用load()
时传递loaderContext答案 2 :(得分:1)
让它工作,图像的Facebook政策文件在其他地方,我将其他所有内容改为“*”
感谢大家的帮助。
Security.loadPolicyFile( 'https://fbcdn-profile-a.akamaihd.net/crossdomain.xml');
答案 3 :(得分:1)
如果您只想显示任何图像,而无法获取其数据,那么良好的解决方法就是不尝试使用此数据。在这种情况下,您不需要允许安全性和跨域文件的东西。仅使用简单的加载代码:
backgroundLoader.unload();
backgroundLoader.contentLoaderInfo.addEventListener(Event.INIT,backgroundImageLoaded, false, 0, true);
var lc : LoaderContext = new LoaderContext();
lc.checkPolicyFile = false;
backgroundLoader.load(new URLRequest(imagePath_),lc);
其中backgroundLoader是Loader类型的类变量。然后,当使用图像将其添加到画布时,不要请求数据(不要使用e.currentTarget.content),只显示图像:
function backgroundImageLoaded(e:Event) : void {
myMovieClip.addChild(backgroundLoader);
}