2010年6月18日 星期五

SWF 安全 crossdomain.xml檔

§SWF 安全性允許拜訪  crossdomain.xml
引言:
 話說有一日小弟將開發好的SWF丟到公司的WebServer上,結果Remote變成無法取回資料了,一查之下才知道原來是Remote服務端沒有設置crossdomain.xml這個檔案,暫時為了測試先將crossdomain.mxl設置成允許所有網域拜訪,事後找了一下adobe的技術手冊,並將其部份整理一下做成筆記,以便日後方便使用。


crossdomain.xml的功能描述:
  • 若要提供您網站伺服器的資料給另一個網域中的 SWF 檔使用,可以在伺服器中建立原則檔。「原則檔」是放置於您伺服器上特定位置中的 XML 檔,這支原則檔即是crossdomain.xml。 
  • 不管是SWF對SWF或是SWF對Remote gatway都必須在其拜訪所在地置放crossdomain.xml檔,以便管理允許由哪個網域來的SWF存取資料。
 crossdomain.xml會影響存取的項目:
  • 點陣圖、聲音、視訊
  • XML與Text檔的載入
  • SWF檔的載入
  • Remote通訊 
下面是一個允許所有網域拜訪,的crossdomain.xml配置範例。
<?xml version="1.0" ?>
 <cross-domain-policy>
   <allow-access-from domain="*" />
  </cross-domain-policy>

簡單的解析Domain工具

§簡易解析domain的tools
在開發專案中,如果swf要提供Embed給其他網站使用,在swf內所要load動作等等的路徑就需要使用絕對路徑,但是若是直接將路徑寫死在開發環境環境中又要改來改去,所以最好的方式就是寫一個能夠解析目前swf所使用的domain為何,因此寫了一個簡單應急的小工具,日後若是有發現更好的方式或是BUG再回頭來補強該篇文章。

//寫一個簡單的工具Class
package com.utils.PathAnalyze
{
 public class DomainPathAnalyze
 {
  /***
  * 解析swf所在domain
  * */
  public function DomainPathAnalyze()
  {
  }

  static public function getDomain(url:String):String
  {
   var count:int = url.length -1;
   for(count ; url.charAt(count) != "/" ; count--)
   {
   }
   return url.slice(0 , count);
  }
 }
}

//可藉由Application的loaderInfo.url取得swf所在網域,然後將此url交由DomainPathAnalyze的靜態方法來取得˙Domain


/*用法*/
DomainPathAnalyze.getDomain(loaderInfo.url);

由於成長之後學習到更好的方式因該改成以下方式將會更有效能。

  static public function getDomain(url:String):String
  {
   var _index:int = url.lastIndex("/");
   return url.slice(0 , index);
  }
 
請參考 http://contest-start.blogspot.com/2011/03/blog-post.html

Flex4中以mxml tags來使用top_level ActionScript elements

§Flex4中使用top_leveel ActionScript elements
Flex3中可以使用mxml tags來使用<Array></Array>、<Number></Number>等等top_level ActionScript elements,而這top_level elements項目都是使用,xmlns:mx="http://www.adobe.com/2006/mxml的命名空間,由於並未與視覺組件命名空間做區隔,因此若是在<Application><Application>使用了top_level elents容易與視覺元件混在一起,一方面覺得使用起來能將非視覺元件標籤直接放於視覺元件標不合理,一方面也覺得很混亂,而我自己習慣上不會去使用top_level tags的用法,但是若想測是一個組件的特性這時的top_level tags到是蠻方便的。


Flex4中top_level elements tags設計得更合理了,這些tags是置於xmlns:fx="http://ns.adobe.com/mxml/2009"命名空間,明顯的與spark、mx來做出區隔,並且無法直接放於顯示組件tags之間,而是置放於<fx:Declarations></fx:Declarations>Tags之間使用,或是能夠接受top_level項目型別的屬性標籤之間,例如: