js与flash交互(转)
在html页面里js调用swf里的方法,以及swf调用js函数。
在as中:
ExternalInterface.call("js函数名“,参数1,参数2,....);//flash调用js
ExternalInterface.addCallback("js函数名", as对应方法);//添加js对应的回调函数。
在html中:
关健是要先获取dom里的flash节点对象.假定为swfobj,
js调用方法为:swfobj.方法名(参数1,参数2);
例如:
as中:
ExternalInterface.addCallback("play", jsplay)
function jsplay(a,b,c){
//do someting
}
则js中可为:
swfobj.play(”a”,”b”,”c”);
js调用时需要对object,embed中的AllowScriptAccess做设定,默认值是: sameDomain,如果跨域的需要设为always,还要对其as中的Security.allowDomain进行设定,图方便可直接设为 Security.allowDomain(*);
补充一个比较杯具的问题:
除纯正的IE之外所有IE内核的浏览器,例如:傲游,TT,世界之窗等等,在js调用flash时会出现安全沙箱的问题。貌似是AllowScriptAccess无效了,其真正原因是因为这些外壳浏览器的缓存机制的问题。比较恶心的作法是针对IE内核的浏览器在引用swf文件时,在其URL地后增加一个随机变量。通过动态改变URL方式清除缓存。本来还以为是这些浏览器有问题,后来细想一下,还是adobe的问题。
jquery+swfobject代码:
var r=$.browser.msie?"?"+Math.random():"";
swfobject.embedSWF("main.swf"+r, "slides", "500", "260", "9.0.0","",
{}, {"AllowScriptAccess":"always"}, {"id":"flash_map","name":"flash_map"});
posted on 2012-04-05 16:05 MoonWalker 阅读(4836) 评论(0) 编辑 收藏 举报