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"});