如果我們只是做一個(gè)單機(jī)版的swf,與世隔絕,那么完全不會接觸到接下來我們要說的這么多東西。。??梢娞岣邔δ沩?xiàng)目的要求是使你學(xué)習(xí)更多知識的方法。
最常見的,我們有這樣一個(gè)主swf(為了簡單說明,再假設(shè)只有這么一個(gè)swf),另外我們有很多資源:jpg,png,xml,txt,swf等等,我們將之放在一個(gè)文件夾Resource下,然后將Resource和主swf放在同一個(gè)目錄下,然后我們通過這個(gè)swf加載、訪問這些資源,我們發(fā)現(xiàn),非常沒有問題。
然而,當(dāng)我們最終需要將這個(gè)swf放在網(wǎng)頁上,并且將那些資源都放在網(wǎng)頁上,那么他們最好還是跟本地一樣的文件結(jié)構(gòu)存放,但是我們知道,網(wǎng)頁上的swf肯定不會自己跑出來顯示,肯定是要網(wǎng)頁來加載他,在網(wǎng)頁中通過"***.swf?p=...&p2=.."這樣的方式來調(diào)用這個(gè)swf和傳參數(shù)。如果這個(gè)網(wǎng)頁也是和swf放在同一個(gè)文件夾下,那也是沒問題的??墒俏覀冇锌赡軙泻芏噙@樣的網(wǎng)頁,都放在一個(gè)文件夾很難管理,于是我們將他們放在不同的文件,這就會導(dǎo)致這樣的問題:A網(wǎng)頁是放在"../1/2/A",B網(wǎng)頁是"../5/5/B",那么URLRequest的默認(rèn)路徑是哪個(gè)呢?是主swf所在的位置么?錯,其實(shí)是看具體調(diào)用它的網(wǎng)頁的地址,例如A調(diào)用時(shí),URLRequest默認(rèn)路徑是"../1/2/",這樣的話,如果我們URLRequest()時(shí)只會在A或B下面找,而不會在swf所在的目錄中找,自然找不到。所以我們的做法是:獲得主swf的絕對路徑,將之作為URLRequest的路徑。要想獲得該swf的絕對路徑,可以這樣:test = stage.loaderInfo.url; 另外我們要將文件名去掉:
test .slice(0,test.lastIndexOf("/")+1);理論上這在本機(jī)上也行得通,但是實(shí)際上是:顯示安全沙箱出錯或者是加載資源出錯。為什么呢?
看看這個(gè)例子就知道了:
在本機(jī)上,我們運(yùn)行swf,得到的test的值為file:///C://test/test.swf,路徑也就是file:///C://test/
在本機(jī)上,我們運(yùn)行同個(gè)目錄下的html文件,發(fā)現(xiàn)沙箱問題、加載問題等等問題,test的值是file://C:\test\,這就難怪他找不到了
于是我們要改成:
test .slice(0,test.lastIndexOf("
\\")+1); 注意,前面的\只是轉(zhuǎn)義字符,實(shí)際上就是讓路徑遇到最后一個(gè)"\"時(shí)截止。這樣的話按道理本機(jī)運(yùn)行swf會有問題,但是實(shí)際上卻是沒有問題。。。
由于之前這個(gè)問題一直纏繞著我,導(dǎo)致我將它和安全沙箱問題混淆了,以為安全沙箱是多么恐怖的事情。
其實(shí)安全沙箱很簡單:
當(dāng)兩個(gè)不同文件夾下面的文件(這兩個(gè)文件至少一個(gè)是swf)要通信時(shí),會出現(xiàn)安全沙箱問題??捎孟旅娴娜我庖粋€(gè)方法解決:
1.在swf里面通過Security.allowDomain("另一個(gè)文件的地址和名字");
2.在另一個(gè)文件所在文件夾下建一個(gè)crossdomain.xml,里面寫上:
<cross-domain-policy><allow-access-from domain="允許訪問的對方的地址和名字" /></cross-domain-policy>
3.如果這兩個(gè)文件中一個(gè)是網(wǎng)頁的話,可以在網(wǎng)頁調(diào)用swf的標(biāo)簽處加上:allowScriptAccess="允許訪問的對方的地址和名字"
4.萬不得已、僅在平時(shí)調(diào)試時(shí):在C:\windows\system32\Macromed\Flash\FlashPlayerTrust 下面,新建一個(gè)隨便的txt文件,里面將你要設(shè)置為同個(gè)域的文件名(包括路徑),每個(gè)一行寫在里面,然后將文件改后綴為.cfg(其實(shí)txt應(yīng)該也沒問題)。
posted on 2010-05-14 17:40
ACong 閱讀(767)
評論(0) 編輯 收藏 引用