20060309

三劍合璧,攻破Flash跨域.

sunshine Mood at 08:38 AM

所謂的三劍就是
1.CGI生成靜态XML頁面,
2.JS異步判斷讀取動态還是靜态的XML,
3.Flash從JS當中獨取已經被頁面Cache住的靜态XML。

此處最大的難點和費解的地方在于字符的轉譯。
因爲Flash與JS的return傳遞的隻能是一個原始的變量不能是一個Object。故此處必須使用String來傳遞。

JS的代码:function GetXmlString(){
xmlstring=String(靜态xml的Object);
xmlstring=xmlstring.replace(/[\t\n\r]/g,"");
return xmlstring;
}

AS的代码:
if (XMLSTRING != undefined && XMLSTRING != "" && XMLSTRING != null && XMLSTRING != "null") {
_global.PhotoXML = new XML(XMLSTRING);
。。。。。。調用處理函數
} else {
。。。。。。讀取動态鏈接
。。。。。。調用處理函數
}


研究過程中最郁悶的問題是
  xmlstring=xmlstring.replace(/[\t\n\r]/g,"");
因爲xml從object變成string的時候其實是ie所看到的效果有回車有tab空段的實體。但是flash在把String還原成XMLObject時卻不能識别。Flash的String裏不能支持此類有回車有tab空段的變量賦值。所以這裏要進行轉譯,但原計劃轉譯的隻有\t和\n分别是tab和回車。遺漏了\r。

以HTML的思維去理解明白\t就是tab,\n是軟回車就是<br>,\r是硬回車就是<p></p>。
數組類型轉化或者轉譯的時候\r會經常被遺漏(就好像這次一樣 -_-!)

在和Stone的讨論有得到些并不知道的咚咚,挺有意思的,共享一下:

stone 16:55:29
有曆史原因的,你見國老式打字機嗎
stone 16:56:27
要按一下enter把紙轉過一行,再把滾筒用手推到最左邊,才能從一行的最開始打起
stone 16:57:41
所以老式的計算機見到\n就把輸入點豎着下移一行,見到\r就把輸入點移到當前行的第一列

看來Flash和JS單項始終不是最優的,有待挖掘的潛力還是很大。Flash利用JS實現跨域并可判斷動靜态文件讀取情況在新一輪的網格當中相信會被更大的引用和發展。

评论加载中……

Recent

菜单加载中……
Index