参考资料:http://tieba.baidu.com/p/882855105
感谢:Z0287yyy
感谢分享精神。
具体解决方案:
在loader去load的时候,带上这个参数
在loader去load的时候,带上这个参数
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain(); //这个是关键
context.checkPolicyFile = true;
context.securityDomain = SecurityDomain.currentDomain;
Loader.load(new URLRequest(url), context);
context.applicationDomain = new ApplicationDomain(); //这个是关键
context.checkPolicyFile = true;
context.securityDomain = SecurityDomain.currentDomain;
Loader.load(new URLRequest(url), context);
原文如下:
如题,最近遇到这么一个难题:
SecurityError: Error #2121: 安全沙箱冲突:LoaderInfo.content:XXX1不能访问XXX2.
可以通过调用 Security.allowDomain 来避免此冲突。
SecurityError: Error #2121: 安全沙箱冲突:LoaderInfo.content:XXX1不能访问XXX2.
可以通过调用 Security.allowDomain 来避免此冲突。
这个问题,其实很搞笑,因为跟Security.allowDomain没有任何关系。
(也可能有,请高手留言斧正。)
因为我在主文件XXX1和子文件XXX2里面有写了
Security.allowDomain("*");
Security.allowInsecureDomain("*");
而且crossdomain.xml文件都在。
(也可能有,请高手留言斧正。)
因为我在主文件XXX1和子文件XXX2里面有写了
Security.allowDomain("*");
Security.allowInsecureDomain("*");
而且crossdomain.xml文件都在。
具体解决方案:
在loader去load的时候,带上这个参数
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain(); //这个是关键
context.checkPolicyFile = true;
context.securityDomain = SecurityDomain.currentDomain;
Loader.load(new URLRequest(url), context);
在loader去load的时候,带上这个参数
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain(); //这个是关键
context.checkPolicyFile = true;
context.securityDomain = SecurityDomain.currentDomain;
Loader.load(new URLRequest(url), context);
context.applicationDomain = new ApplicationDomain();
的时候会指定新的域,与原有的flex程序域不同,所以不会出问题了。
ApplicationDomain 的说明:
加载到子域(模块)
类似于“继承”,子域可以直接获得父域所有的类定义,反之父域得不到子域的。和继承关系不同的是,如果子域中有和父域同名的类,子域定义会被忽略而使用父域的定义。
加载到同域(运行时共享库)
的时候会指定新的域,与原有的flex程序域不同,所以不会出问题了。
ApplicationDomain 的说明:
加载到子域(模块)
类似于“继承”,子域可以直接获得父域所有的类定义,反之父域得不到子域的。和继承关系不同的是,如果子域中有和父域同名的类,子域定义会被忽略而使用父域的定义。
加载到同域(运行时共享库)
类似集合里的合并关系。被加载swf里的所有类定义被合并到当前域中可以直接使用。和加载到子域相同,和当前域同名的定义也会被忽略。
加载到新域(独立运行的程序或模块)
swf载入指定域之前,先要检查该域及其父域中是否存在同名类,重复定义一概忽略。如果加载别人写的程序,或者使用旧版本的主程序加载新版本的模块,为避免类名冲突就要加载到新域独立运行以使用自己的类。
当然flash加载flex,或者flex加载flash就没有这个问题。
因为flash和flex的空间可能就不同。
只有flex加载flex会出现这个问题。。稀烂。。。
另外,
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
也是不行的。。。他意味着加载到同一个有域,,有冲突,(程序可能会卡在这个地方)
因为flash和flex的空间可能就不同。
只有flex加载flex会出现这个问题。。稀烂。。。
另外,
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
也是不行的。。。他意味着加载到同一个有域,,有冲突,(程序可能会卡在这个地方)
本文转自火地晋博客园博客,原文链接:http://www.cnblogs.com/yelaiju/p/3494797.html,如需转载请自行联系原作者