本文主要是介绍Flash/ActionScript 解决跨域问题的策略文件crossdomain.xml的写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在做视频截图的时候遇到了 Flash 安全沙箱 错误,到网上找了很多方法,弄了半天,搞得心烦意乱,最后才解决。在这里记下来。
使用 BitmapData.draw Flash弹出这个错误
SecurityError: Error #2123: 安全沙箱冲突:BitmapData.draw: xxx.swf 不能访问 null。未被授权访问任何策略文件。
解决方法:(反正我是这样解决了)
1,修改 crossdomain.xml 代码如下。(注:网上很多方法没有在xml根上加 encoding ,我是加上后 才解决的。)
这个写法 对于Flash11 以上的版本 绝对错不了,也不会漏。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all" />
<allow-access-from domain="*" to-ports="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
2,在舞台创建的时候加入这几行。
Security.allowDomain("*")
Security.allowInsecureDomain("*");
Security.loadPolicyFile("http://xxxx/crossdomain.xml");
3,把crossdomain.xml 另存为 无BOM 的 utf-8 格式。
附录:没解决前,我用 finfo_file 打印 crossdomain.xml。结果为:application/xml; charset=us-ascii。
看到 charset=us-ascii 后,马上把crossdomain.xml 另存为utf-8 ,问题 就解决了!
也就是说 flash 读取 crossdomain.xml ,在解释 服务器 发回来的 cross-domain-policy 字节流时,处理 其 编码 是有关系的!
如果 你的web服务器较为古老,也许需要 加入 mime 以应对 crossdomain.xml 的请求!
<mime-mapping>
<extension>xml</extension>
<mime-type>application/xml</mime-type>
</mime-mapping>
就是Content-Type 必需返回 application/xml。
或者,直接 把 crossdomain.xml 改为 txt ,crossdomain.txt 。
回过头来,说一下 : 安全沙箱冲突:BitmapData.draw: xxx.swf 不能访问 的问题。
如果NetStream是用生成模式创建视频,也就是 使用了 appendBytes 函数,那么 ,这个 Video 是 不能 draw 的。。。
这篇关于Flash/ActionScript 解决跨域问题的策略文件crossdomain.xml的写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!