现在的位置: 首页 > 综合 > 正文

js与flash交互(转)

2012年02月07日 ⁄ 综合 ⁄ 共 885字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.