例子
http://aaa.com/index.html中调用http://bbb.com/b.swf,用户点击该页面上的Flash无法触发该页面的js。
这是由于Flash的安全域所导致的。虽然allowScriptAccess=“always”这个方法能解决IE核心下的问题,但非IE核心则问题依旧。
解决方法
采用给主Flash套壳的方法,Flash壳放在同页面一个域名下并在页面中显示,而触发js的部分,则让壳来触发,壳监控另一个域名主FLash的参数。
AS3只需要稍微小修改即可使用。
结构
域名A┬页面A.html //访问页
└域名A.swf
//Flash壳,在“页面A.html”中显示
域名B┬域名B.swf //主Flash
└crossdomain.xml
//允许域名的列表(可选择)
域名A.swf
//加载到main,这里是另一个域名的swf
loadMovie(“http://域名B/域名B.swf”, main);
//防重复锁
var safeHold = true;
//taskStatusHold==false 执行
//quickOpen=true 直接打开,false 1秒后打开
_root.onEnterFrame = function() {
if(main.taskStatusHold==false
&& safeHold){
if(main.quickOpen){
gotoAndPlay(24);
}else{
play();
}
safeHold = false;
}
};
域名B.swf
//允许Flash间跨域操作
System.security.allowDomain(“*”); //所有
或者
System.Security.loadPolicyFile(“http://域名B/crossdomain.xml”);
//外部调节
crossdomain.xml
<?xml version=”1.0″?> <!- http://域名B/crossdomain.xml -> <cross-domain-policy> <allow-access-from domain=”域名A”/> <allow-access-from domain=”域名B”/> </cross-domain-policy>
域名B.swf其他注意
_root.下改成this.
非_root.下需要读取_root.的则改用_parent.