Flash:彻底理解crossdomain.xml、跨swf调用。

安全域、crossdomain.xml,到处都有各种各种零碎的基础解释,所以这里不再复述这些概念。

本文目的是整理一下各种跨域加载的情况。什么时候会加载crossdomain,什么时候不加载。

1、Loader加载图片或者swf,只要不是加载到同个安全域,都不需要拉取crossdomain.xml。获取在LoaderContext指定true,必须拉取。

     但如果后续,要读取图片或者swf里边内容,例如设置图片smoothing或者draw,都需要拉取这个文件

     如果文件不存在,会抛出安全沙箱冲突

 可以手工security.loadPolicyFile,也可以在loader中设置loader.load(new URLRequest("http://xxxxxxxx/xxxx.jpg"),new LoaderContext(true));

     但必须代码中指定拉取策略文件才会去拉取,flash不会自动拉取。如果到了截图的时候发现没有拉取这个文件,就会报错。

2、URLLoader请求的内容,flash会先自动请求crossdomain.xml,如果得到授权后再请求指定内容。

3、对于swf,如果要调用其他域名下的swf的脚本,还需要有Security.allowDomain()

http://help.adobe.com/zh_CN/AS2LCR/Flash_10.0/help.html?content=00001493.html

如果两个 SWF 文件是同一个域提供,例如,http://mysite.com/movieA.swf 和  http://mysite.com/movieB.swf,则 movieA.swf 可以检查和修改 movieB.swf 中的变量、对象、属性、方法等,而且 movieB.swf 也可以对 movieA.swf 执行同样的操作。这被称为跨影片脚本编写 或简称跨脚本编写

如果从不同的域提供两个 SWF 文件(例如 http://mysite.com/movieA.swf 和  http://othersite.com/movieB.swf),则在默认情况下,Flash Player 既不允许 movieA.swf 编写 movieB.swf 的脚本,也不允许 movieB.swf 编写 movieA.swf 的脚本。通过调用 System.security.allowDomain(),一个 SWF 文件可授予其它域中的 SWF 文件编写其脚本的权限。这称为跨域脚本编写。通过调用 System.security.allowDomain("mysite.com"),movieB.swf 授予 movieA.swf 编写 movieB.swf 的脚本的权限。

使用 System.security.allowDomain() 建立的跨域权限是不对称的。在上一个示例中,movieA.swf 可以编写 movieB.swf 的脚本,但 movieB.swf 无法编写 movieA.swf 的脚本,这是因为 movieA.swf 未调用 System.security.allowDomain() 来授予 othersite.com 编写 movieA.swf 的脚本的权限。可以通过让两个 SWF 文件都调用 System.security.allowDomain() 来设置对称权限。

当然,有crossdomain.xml文件前提下,可以直接用urlloader加载回来,然后在loader.loadBytes,这样就放到同一个程序域内了,没有上述限制了。

4、如果swf在本地运行,情况又不一样,设置受信认区域(控制面板flash),本地可以加载任意网络文件都不会出错。因为flash会略过所有crossdomain文件

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿

linux 系统留后门方法和清除日志

1. setuid #cp /bin/sh /tmp/.sh #chmod u+s /tmp/.sh 加上 suid 位到shell上,虽然很简单,但容易...

75950
来自专栏云计算教程系列

如何在Nbuntu 18.04上将Nginx Web Root移动到新位置

在Ubuntu上,Nginx Web服务器将其文档存储在/var/www/html中,该文档通常位于其余具有操作系统部分的根文件系统上。但有时,将文档根移动到另...

8600
来自专栏编程坑太多

『高级篇』docker之kubernetes搭建集群添加认证授权(上)(38)

kubernetes的安装有几种方式,不管是kube-admin还是社区贡献的部署方案都离不开这几种方式:

13440
来自专栏北京马哥教育

Python 发送邮件脚本

? 作者:Jesse-csdn 来源: http://blog.csdn.net/l2show/ar...

607100
来自专栏有趣的django

linux基础

1.目录 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先...

48250
来自专栏我的博客

vsftp +mysql 配置详细过程

本文章由网友:苶然(QQ网名)供稿,在此特别感谢他 需要安装包 db4-* vsftpd- mysql-server mysql-devel pam...

40950
来自专栏程序猿

linux 系统命令大全

系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # ...

49870
来自专栏云知识学习

kubectl配置单、多集群访问

您可以通过 Kubernetes 命令行工具 kubectl 从本地客户端机器连接到 TKE 集群。

74320
来自专栏运维

关于too many files open的解决办法

当我们用一些大的测试程序时,有时可能会报错,too many files open之类的错误,系统默认的同时打开文件数是1024,可以用这个命令查看: #uli...

13020
来自专栏陈纪庚

如何使用nodejs发邮件

昨天就开始想使用nodemailer来实现一个发送邮件的功能,不过发现了很多个坑,网上给的资料也很杂很乱,所以决定写一篇真正能用的来帮助大家减少弯路

19130

扫码关注云+社区

领取腾讯云代金券