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