2010年9月10日 星期五

Flash跨網域JS注意要項

在Flash程式開發應用於網頁上時
常會需要用到與JS的互動,也就是呼叫JS或被JS呼叫
抑或載入外部檔案等,如果發生跨網域的狀況
常會讓工作無法順利執行下去
以下幾點概念可以讓CrossDomain問題,降到最低

1.swf所屬網域,以其所在網頁為準
當你在A網域放了一個網頁A.htm,在這網頁內連結了B網域上的
swf與JS File,如果你在執行的A.htm上的flash有呼叫到了JS上的
function,雖然swf與JS實體檔案同在B domain上,但是在這時候,會被視為非
同一個Domain

2.讓Flash呼叫外部script function
在網頁上嵌入Flash的Tag 有一個參數allowScriptAccess預設值為SameDomain
亦即允許swf與同Domain上的JS做互動,若需要跨網域呼叫執行,則需要將值設定
為always,例如在A Domain上的swf被嵌入到B Domain上的網頁上時,要讓他可以
執行在A Domain上的JS Function,就需要做always設定
但通常在安全性考量,大部分允許讓你貼embed code的網站都會把這個參數忽略掉
而如果要完全不允許flash與script做互動,則可以設定成none

3.讓Flash可以讓script呼叫執行
如果要讓JS可以操作執行Flash內的function
當然是利用ExternalInterface來連結,但若是涉及跨網域的呼叫執行
則需要先在Flash內設定
Security.allowDomain(設定允許的domain)
這樣就可以允許跨網域被呼叫了

4.載入跨網域外部檔案到flash內
要載入非同網域的圖片或檔案到flash內,需要在提供被讀取資料的網站下
放置crossdomain.xml這policy file,然後在flash內使用
Security.loadPolicyFile(policy file路徑),
先讀取,接下來就可以任意的讀取該網站上的資料

沒有留言: