Loader拉取图片,由于redirect重定向,导致策略文件无效 设置checkPolicyFile后还是无效:需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志

大家好,在这里分享一下flash里边处理redirect的方法。

一般而言,大家不会遇到这个问题,毕竟图片地址一般杠杠的,不会redirect。但昨天在拉取空间的照片就会出现redirect。神啊!!!

而且这个不是必现的,空间某些照片会突然redirect,例如从aXX.photo.qq.com域名转到sXX.photo.qq.com。

这个redirect,对于页面来说,当然是没问题的,反正浏览器解决了。但是在Flash里边,如果需要对下载回来的图片进行处理(放缩、平滑等),你就肯定会遇到 “需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志 ”之类的报错。

但是,即使你在Loader的load之前设置了这个标志,也是没用的,因为abode没有这么完善,自动对redirect后的url再请求一次crossdomain.xml文件。

这个时候只能靠自己了~~~

解决方案:

1、乐观情况下,你知道redirect后的几个地址,如果无非就几个。那么你可以在整个程序开始,就直接手工loadPolicyFile。嘿嘿,先下手为强。

Security.loadPolicyFile(http://show.qq.com/crossdomain.xml);

2、悲剧情况下,redirect的地址无数个,随机的。那么就只能出绝招了。在Complete事件处理中,判断一下这次的请求是不是redirect过。

如果是,那么就手工请求这次新的策略文件crossdomain.xml。同时根据adobe官方说明,我们还需要轮询contentLoaderInfo 的 childAllowsParent ,如果是true,才表示新的策略文件已经拉取回来。

那么,可以参考以下代码:

private function loadImage(imageURL:String):void

{

_originURL = imageURL;

var imageLoader:Loader = new Loader();

var lc:LoaderContext = new LoaderContext(true); 

imageLoader.load(new URLRequest(imageURL), lc);

imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImageCompleteHandler);

imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadImageFailHandler);

}

 

private function loadImageCompleteHandler(event:Event):void

{

event.target.removeEventListener(Event.COMPLETE, loadImageCompleteHandler);

event.target.removeEventListener(IOErrorEvent.IO_ERROR, loadImageFailHandler);

//实际url跟原来url不一致,被redirect了,要重新拉取策略文件

if(event.target.url != _originURL)

  Security.loadPolicyFile(event.target.url.split("/").slice(0, 3).join("/") + "/crossdomain.xml");

_waitPolicyFileTimer = setInterval(function():void

{

if(event.target.childAllowsParent)

{

  clearInterval(_waitPolicyFileTimer);

  _waitPolicyFileTimer = 0;

  _image = Bitmap(event.target.content);

  _image.smoothing = true;

  addChildAt(_image, 0);

  if (_loadImageCompleteHandler != null)

    _loadImageCompleteHandler();

  }

}, 50);

}

 

附上官方说明:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/LoaderContext.html#checkPolicyFile

如果大家以后拉取照片,发现偶尔打不开,或者很奇怪的情况,也许是因为跨域问题,flash内部出错了!这个时候,请想起来,这里有这样的一个分享~~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨龙飞前端

scrollto 到指定位置

2514
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4667
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏魂祭心

原 canvas绘制clock

4144
来自专栏落花落雨不落叶

canvas画简单电路图

62311
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2587
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4868
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4035
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4928

扫码关注云+社区