如果我从外部域访问图像,event.target.content.loaderInfo会出错(SecurityError:错误#2123)

时间:2013-06-04 14:17:27

标签: actionscript-3 osmf

我正在研究基于OSMF的播放器。我在播放器的右上角添加了徽标图片。现在我想点击徽标图片打开链接。

我在onMain点击事件中编写了一个Action脚本代码

CODE:

private function onMainClick(event:MouseEvent):void{

if(event.target.hasOwnProperty("content"))

                {

                    var info:LoaderInfo = event.target.content.loaderInfo;

                    var imageUrl:String = configuration.LogoImage;//Logo url to display on player

                    imageUrl = imageUrl.split("/").splice(1).join("/");

                     if(info.url.search(imageUrl) >= 0)
                     {

                        var url:String = configuration.LogoLink;//Logo link to open in new tab

                        var request:URLRequest = new URLRequest(url);

                        try

                        {

                            navigateToURL(request, '_blank');

                        }

                        catch(error:Error)

                        {

                            trace("Error occurred!");

                        }

                    }

                }

}

当我从同一个域提供徽标网址时,它工作正常(给定的网址将在新标签中打开)。从外部域访问图像时出现问题。一个不支持来自我的域名请求的域名。

更多信息:我的播放器右上角正确显示徽标图片。在徽标网址的clcik我得到低于错误。我从配置文件中提供了徽标网址

SecurityError:错误#2123:安全沙箱冲突:Loader.content:http:///release/XYZPlayer.swf无法访问http://www.esnipe.com/shared/help_icon.gif。没有授予访问权限的策略文件。

at flash.display::Loader/get content()

at StrobeMediaPlayback/onMainClick()

任何人都可以帮我解决这个错误。

1 个答案:

答案 0 :(得分:0)

没有http://www.esnipe.com/crossdomain.xml文件授予对已加载内容的访问权限。

有访问加载的图像bitmapData(Loading Profile Images on VK.com in ActionScript)的解决方法,但查看代码,您只需要记住加载的图像的网址。尝试将其存储在某个地方,例如在本地变量中,或者通过自定义加载器类扩展flash Loader,并将最后加载的URLRequest对象存储在其中。

示例:

public class LoaderExt extends Loader
{
    private var _request:URLRequest;

    public function get url():String{return _request ? _request.url : null}

    public function LoaderExt()
    {
        super();
    }

    override public function load(request:URLRequest, context:LoaderContext=null):void
    {
        _request = request;

        super.load(request, context);
    }
}