四、SWF文件之間從HTTP到HTTPS協(xié)議的訪問
正如前一節(jié)所討論的,在Flash 7播放器中,跨域和子域訪問的規(guī)則已經(jīng)修改。除了現(xiàn)在執(zhí)行精確域匹配規(guī)則外,你必須顯式說明允許存放在使用不安全協(xié)議的站點(diǎn)的文件訪問存放在使用安全協(xié)議(HTTPS)的站點(diǎn)的文件。根據(jù)被調(diào)用的文件是針對Flash 7播放器還是針對Flash 6播放器發(fā)布的,你必須執(zhí)行一個allowDomain語句,或使用新的LocalConnection.allowInsecureDomain事件處理函數(shù)或System.security.allowInsecureDomain()語句。
警告:執(zhí)行allowInsecureDomain()語句危及HTTPS協(xié)議提供的安全。只有在你不能重新組織你的站點(diǎn)以便所有的SWF文件都能接受HTTPS協(xié)議的服務(wù)時(shí)才做這樣的修改。
下面的代碼說明你可能需要做的修改:
// 允許存放在http://www.someSite.com或http://www.someOtherSite.com // 針對Flash 7播放器發(fā)布的SWF文件訪問的存放在https://www.someSite.com // 針對Flash 6播放器發(fā)布的SWF文件中的命令 my_lc.allowDomain = function(sendingDomain) { return(sendingDomain=="someOtherSite.com"); } // 允許針對Flash 7播放器發(fā)布的 // 存放在http://www.someSite.com或http://www.someOtherSite.com的 // 針對Flash 7播放器發(fā)布的SWF文件訪問的對應(yīng)命令 System.security.allowInsecureDomain("www.someSite.com", "www.someOtherSite.com"); my_lc.allowInsecureDomain = function(sendingDomain) { return(sendingDomain=="www.someSite.com" || sendingDomain==www.someOtherSite.com); }
如果你當(dāng)前還沒有使用這些語句,你也可能需要添加這樣的語句。
即使兩個文件都在相同的域也可能需要修改(例如,存放http://www.domain.com的文件調(diào)用存放在https://www.domain.com的文件)。
總的來說,如果你針對Flash 7播放器發(fā)布文件且符合以下條件,你可能要修改你的文件,添加或修改語句:
①你編寫跨SWF文件的腳本(使用loadMovie()、MovieClip.loadMovie()、MovieClipLoader.LoadClip()或本地連接對象)。
②調(diào)用文件沒有存放在使用HTTPS協(xié)議的站點(diǎn)和被調(diào)用的SWF文件存放在使用安全協(xié)議(HTTPS)的站點(diǎn)。
你必須做以下修改:
①如果被調(diào)用的SWF文件是針對Flash 7播放器發(fā)布的,在被調(diào)用的SWF文件中包含System.security.allowDomain或LocalConnection.allowDomain語句,使用精確域名匹配(如本節(jié)前面的代碼實(shí)例所示)。即使調(diào)用的和被調(diào)用的SWF文件存放在相同的域,也需要這個語句。
②如果被調(diào)用的SWF文件是針對Flash 6或以前的播放器版本發(fā)布的,且調(diào)用的和被調(diào)用的文件都存放在相同的域(例如,存放http://www.domain.com的文件調(diào)用存放在https://www.domain.com的文件),不需要修改。
③如果被調(diào)用的SWF文件是針對Flash 6播放器版本發(fā)布的,調(diào)用的和被調(diào)用的文件不在相同的域,而你又不想針對Flash 7播放器導(dǎo)出被調(diào)用文件,就要修改被調(diào)用文件,添加或修改System.security.allowDomain或LocalConnection.allowDomain語句,使用精確域名匹配(如本節(jié)前面的代碼實(shí)例所示)。
④如果被調(diào)用的SWF文件是針對Flash 6播放器版本發(fā)布的,而你又想針對Flash 7播放器發(fā)布被調(diào)用文件,就在被調(diào)用文件中包含System.security.allowDomain或LocalConnection.allowDomain語句,使用精確域名匹配(如本節(jié)前面的代碼實(shí)例所示)。即使兩個文件都存放在相同的域,也需要這個語句。
⑤如果被調(diào)用的SWF文件是針對Flash 5或以前的播放器版本發(fā)布的,且兩個文件不在相同的域,你可以做兩件事情。你可以針對Flash 6播放器發(fā)布被調(diào)用文件或修改System.security.allowDomain語句,使用精確域名匹配(如本節(jié)前面的代碼所示);或者你可以針對Flash 7播放器發(fā)布被調(diào)用文件,使用精確域名匹配(如本節(jié)前面的代碼實(shí)例所示)。
五、允許訪問數(shù)據(jù)的服務(wù)器端策略文件
使用這些數(shù)據(jù)裝載調(diào)用,F(xiàn)lash文檔可以從外部源載入數(shù)據(jù):XML.load()、XML.sendAndLoad()、LoadVars.load()、LoadVars.sendAndLoad()、loadVariables()、loadVariablesNum()、MovieClip.loadVariables()、XMLSocket.connect()和Macromedia Flash Remoting(NetServices.createGatewayConnection)。SWF文件也可以在運(yùn)行期導(dǎo)入運(yùn)行期共享庫(RSL)或其它SWf文件中定義的資源。在默認(rèn)情況下,被導(dǎo)入的數(shù)據(jù)或RSL必須存儲在與裝載這些外部數(shù)據(jù)或媒體的SWF文件相同的域。
要使來自不同域的SWF文件能夠使用數(shù)據(jù)和運(yùn)行期共享庫中的資源,你應(yīng)該使用跨域策略文件?缬虿呗晕募且粋XML文件,它為服務(wù)器提供一種方法來指明它的數(shù)據(jù)和文檔對來自某些域或所有域的SWF文件是可用的。任何一個來自服務(wù)器策略文件中指定的域的SWF文件都允許訪問該服務(wù)器的數(shù)據(jù)或RSL。
如果你在裝載外部數(shù)據(jù),即使你不打算針對Flash 7播放器發(fā)布任何文件,你也應(yīng)該創(chuàng)建策略文件。如果你正在使用RSL,且針對Flash 7播放器發(fā)布調(diào)用的和被調(diào)用的文件,你應(yīng)該創(chuàng)建策略文件
出處:天極設(shè)計(jì)在線
責(zé)任編輯:qhwa
上一頁 AS代碼2:針對Flash Player7 [2] 下一頁
◎進(jìn)入論壇Flash專欄版塊參加討論
|