Flash:徹底理解crossdomain.xml、跨swf調用。


安全域、crossdomain.xml,到處都有各種各種零碎的基礎解釋,所以這里不再復述這些概念。
本文目的是整理一下各種跨域加載的情況。什么時候會加載crossdomain,什么時候不加載。
 
1、Loader加載圖片或者swf,只要不是加載到同個安全域,都不需要拉取crossdomain.xml。獲取在LoaderContext指定true,必須拉取。
     但如果后續,要讀取圖片或者swf里邊內容,例如設置圖片smoothing或者draw,都需要拉取這個文件
 
     如果文件不存在,會拋出安全沙箱沖突
 
      可以手工security.loadPolicyFile,也可以在loader中設置loader.load(new URLRequest("http://xxxxxxxx/xxxx.jpg"),new LoaderContext(true));
     但必須代碼中指定拉取策略文件才會去拉取,flash不會自動拉取。如果到了截圖的時候發現沒有拉取這個文件,就會報錯。
 
2、URLLoader請求的內容,flash會先自動請求crossdomain.xml,如果得到授權后再請求指定內容。
 
3、 對於swf,如果要調用其他域名下的swf的腳本,還需要有Security.allowDomain()
 

如果兩個 SWF 文件是同一個域提供,例如,http://mysite.com/movieA.swf 和 
http://mysite.com/movieB.swf,則 movieA.swf 可以檢查和修改 movieB.swf 中的變量、對象、屬性、方法等,而且 movieB.swf 也可以對 movieA.swf 執行同樣的操作。這被稱為跨影片腳本編寫 或簡稱跨腳本編寫

如果從不同的域提供兩個 SWF 文件(例如 http://mysite.com/movieA.swf 和 
http://othersite.com/movieB.swf),則在默認情況下,Flash Player 既不允許 movieA.swf 編寫 movieB.swf 的腳本,也不允許 movieB.swf 編寫 movieA.swf 的腳本。通過調用 System.security.allowDomain(),一個 SWF 文件可授予其它域中的 SWF 文件編寫其腳本的權限。這稱為跨域腳本編寫。通過調用 System.security.allowDomain("mysite.com"),movieB.swf 授予 movieA.swf 編寫 movieB.swf 的腳本的權限。

使用  System.security.allowDomain()  建立的跨域權限是不對稱的。在上一個示例中,movieA.swf 可以編寫 movieB.swf 的腳本,但 movieB.swf 無法編寫 movieA.swf 的腳本,這是因為 movieA.swf 未調用  System.security.allowDomain()  來授予 othersite.com 編寫 movieA.swf 的腳本的權限。可以通過讓兩個 SWF 文件都調用 System.security.allowDomain() 來設置對稱權限。
 
當然,有crossdomain.xml文件前提下,可以直接用urlloader加載回來,然后在loader.loadBytes,這樣就放到同一個程序域內了,沒有上述限制了。
 
4、如果swf在本地運行,情況又不一樣,設置受信認區域(控制面板flash),本地可以加載任意網絡文件都不會出錯。因為flash會略過所有crossdomain文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM