[AS2]JS与Flash非同一域名下的跨域解决办法

例子

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

6febd59dta7ec7ccb4061690
//加载到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

6febd59dta7ec883a0932690
//允许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.

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据