Flash 文檔可通過使用以下某種數據加載調用方法從外部源加載數據:XML.load()
、XML.sendAndLoad()
、LoadVars.load()
、LoadVars.sendAndLoad()
、loadVariables()
、loadVariablesNum()、MovieClip.loadVariables()
、XMLSocket.connect()
和 Macromedia Flash Remoting (NetServices.createGatewayConnection
)。另外,SWF 文件可以在運行時導入運行時共享庫 (RSL) 或另一個 SWF 文件中定義的資源。默認情況下,數據或 RSL 必須與加載該外部數據或媒體的 SWF 文件駐留在同一個域中。
若要使運行時共享庫中的數據和資源可用于其它域中的 SWF 文件,應使用跨域策略文件。跨域策略文件是一個 XML 文件,該文件提供的方法可以使服務器指示其數據和文檔可用于從某些域或所有域提供的 SWF 文件。服務器的策略文件指定的域所提供的所有 SWF 文件都將被允許訪問該服務器中的數據、資源或 RSL。
如果您加載外部數據,即使不想將任何文件移植到 Flash Player 7 中,也應創建策略文件。如果您使用 RSL,并且調用或被調用文件是以 Flash Player 7 為目標播放器發布的,則應創建策略文件。
允許跨域數據加載
當 Flash 文檔試圖訪問另一個域中的數據時,Flash Player 將自動試圖從該域加載策略文件。如果試圖訪問數據的 Flash 文檔所在的域包括在該策略文件中,則數據將自動成為可訪問數據。
策略文件必須命名為 crossdomain.xml,并且可以駐留在服務器的根目錄和其它目錄之中,該服務器提供具有其它 ActionScript 的數據。只有在通過 HTTP、HTTPS 或 FTP 進行通信的服務器上,策略文件才起作用。策略文件特定于它所駐留的服務器的端口和協議。
例如,位于 https://www.macromedia.com:8080/crossdomain.xml 的策略文件只適用于在端口 8080 通過 HTTPS 對 www.macromedia.com 進行的數據加載調用。
此規則的例外情況是,使用 XMLSocket 對象連接到另一個域中的套接字服務器。如果是這種情況,運行于與套接字服務器所在的同一個域中端口 80 上的 HTTP 服務器必須提供該方法調用的策略文件。
XML 策略文件包含單個 <cross-domain-policy>
標簽,該標簽又包含零個或多個 <allow-access-from>
標簽。每個 <allow-access-from>
標簽包含一個屬性 domain
,該屬性指定一個確切的 IP 地址、一個確切的域或一個通配符域(任何域)。通配符域由單個星號 (*
)(匹配所有域和所有 IP 地址)或后接后綴的星號(只匹配那些以指定后綴結尾的域)表示。后綴必須以點開頭。但是,帶有后綴的通配符域可以匹配那些只包含后綴但不包含前導點的域。例如,cenfun.com 可以看作是 *.cenfun.com 的一部分。IP 域規范中不允許使用通配符。
如果您指定了一個 IP 地址,則將只向使用 IP 語法從該 IP 地址(例如 http://65.57.83.12/flashmovie.swf)加載的 SWF 文件授予訪問權限,而不向使用域名語法加載的 SWF 文件授予訪問權限。Flash Player 不執行 DNS 解析。
下面的示例顯示一個策略文件,該策略文件允許從 cenfun.com 上的 Flash 文檔訪問來自 cenfun.com、www.friendOfcenfun.com、*.cenfun.com 和 105.216.0.40 的 Flash 文檔:
<?xml version="1.0"?>
<!-- http://www.cenfun.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="www.friendOfcenfun.com" />
<allow-access-from domain="*.cenfun.com" />
<allow-access-from domain="105.216.0.40" />
</cross-domain-policy>
您也可以允許訪問來自任何域的文檔,如下面的示例所示:(http://www.cenfun.com/crossdomain.xml )
<?xml version="1.0"?>
<!-- http://www.cenfun.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
每個 <allow-access-from>
標簽還具有可選的 secure
屬性。secure
屬性默認為 true
。如果您的策略文件在 HTTPS 服務器上,并且要允許 HTTP 服務器上的 SWF 文件從 HTTPS 服務器加載數據,則可以將此屬性設置為 false
。
將 secure
屬性設置為 false
可能會危及 HTTPS 提供的安全性。
如果您正在下載來自 HTTPS 服務器的 SWF 文件,而加載它的 SWF 文件在 HTTP 服務器上,則您需要為 <allow-access-from>
標簽添加 secure="false"
屬性,如下面的代碼所示:
<allow-access-from domain="www.cenfun.com" secure="false" />
不包含任何 <allow-access-from>
標簽的策略文件相當于服務器上沒有策略。
posted on 2008-02-28 14:50
華夢行 閱讀(2397)
評論(0) 編輯 收藏