从facebook加载图像时出现策略文件错误

时间:2010-01-21 20:54:15

标签: flash facebook

我在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登录或任何东西,他们只是用户公开个人资料图片)

4 个答案:

答案 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);
}

(来自http://www.onegiantmedia.com/as3--load-a-remote-image-from-any-url--domain-with-no-stupid-security-sandbox-errors的解决方案)