二、設(shè)置和本地?cái)?shù)據(jù)的域名規(guī)則
在Flash 6播放器中,當(dāng)訪問本地設(shè)置(如攝像機(jī)或麥克風(fēng)訪問許可)或本地永久數(shù)據(jù)(共享對(duì)象)時(shí),默認(rèn)使用超域匹配規(guī)則。也就是說,存放在here.xyz.com、there.xyz.com和xyz.com的SWF文件的設(shè)置和數(shù)據(jù)是共享的,且都存儲(chǔ)在xyz.com中。
在Flash 7播放器中,默認(rèn)使用精確域匹配規(guī)則。也就是說,存放在here.xyz.com的文件的設(shè)置和數(shù)據(jù)存儲(chǔ)在here.xyz.com中,存放在there.xyz.com的文件的設(shè)置和數(shù)據(jù)存儲(chǔ)在there.xyz.com中,等等。
新的屬性System.exactSettings讓你指定使用哪種規(guī)則。這個(gè)屬性支持針對(duì)在Flash 6或更高版本播放器發(fā)布的文件。對(duì)于針對(duì)Flash 6播放器發(fā)布的文件,本屬性的默認(rèn)值是false,這意味著使用超域匹配規(guī)則。對(duì)于針對(duì)Flash 7播放器發(fā)布的文件,本屬性的默認(rèn)值是true,這意味著使用精確域匹配規(guī)則。
如果你使用設(shè)置和永久本地?cái)?shù)據(jù),且想要針對(duì)Flash 7播放器發(fā)布一個(gè)Flash 6播放器的SWF文件,你可能需要在發(fā)布的文件中把本屬性值設(shè)置為false。
三、SWF文件之間的跨域和子域訪問
當(dāng)你開發(fā)一系列互相通訊的SWF文件時(shí),例如,當(dāng)使用loadMovie()、MovieClip.loadMovie()、 MovieClipLoader.LoadClip()命令或本地連接對(duì)象時(shí),你可能把這些動(dòng)畫文件存放在不同的域或一個(gè)超域的不同的子域中。
在針對(duì)Flash 5或更早版本的播放器發(fā)布的文件中,跨域或子域訪問不受限制。
在針對(duì)Flash 6播放器發(fā)布的文件中,你可以使用LocalConnection.allowDomain事件處理函數(shù)或System.security.allowDomain()方法來指定允許跨域訪問(例如,讓在someOtherSite.com域的文件訪問在someSite.com域的文件),且無需用命令來允許子域訪問(例如,在store.someSite.com子域的文件可以訪問在www.someSite.com子域的文件)。
在針對(duì)Flash 7播放器發(fā)布的文件中,SWF文件之間的訪問與早期版本有兩個(gè)方面的不同。首先,F(xiàn)lash 7播放器執(zhí)行精確域匹配而不是超域匹配規(guī)則。因此,被訪問的文件(即使是針對(duì)早期的Flash播放器版本而不是Flash 7播放器發(fā)布的文件)必須顯式指定允許跨域或子域訪問。其次,存放在使用安全協(xié)議(HTTPS)站點(diǎn)中的文件,必須顯式指定允許來自使用不安全協(xié)議(HTTP或FTP)的站點(diǎn)的文件的訪問。
因?yàn)镕lash 7播放器執(zhí)行精確域匹配而不是超域匹配規(guī)則,如果你想要針對(duì)Flash 7播放器發(fā)布的文件能夠訪問你現(xiàn)有的腳本,你可能需要修改這些腳本。(你仍然可以針對(duì)Flash 6播放器發(fā)布修改過的文件。)
如果你在文件中使用LocalConnection.allowDomain()或System.security.allowDomain()語句,并指定允許訪問超域站點(diǎn),你必須修改你的參數(shù)來指定準(zhǔn)確的域。下面的代碼說明你可能需要進(jìn)行的修改:
// 允許存放在www.someSite.com或store.someSite.com域的SWF文件訪問 System.security.allowDomain("someSite.com"); // 存放在www.anyOldSite.com域的SWF文件中的Flash 6播放器命令 my_lc.allowDomain = function(sendingDomain){ return(sendingDomain=="someSite.com"); } // 允許針對(duì)Flash 7播放器發(fā)布的SWF文件訪問的對(duì)應(yīng)命令 System.security.allowDomain("www.someSite.com", "store.someSite.com"); my_lc.allowDomain = function(sendingDomain) { return(sendingDomain=="www.someSite.com" || sendingDomain=="store.someSite.com"); }
如果你當(dāng)前還沒有使用這些語句,你也可能需要添加這樣的語句。
例如,如果你的SWF文件存放在www.someSite.com域,且你想允許存放在store.someSite.com域針對(duì)Flash 7播放器發(fā)布的SWF文件訪問,你必須給存放在www.someSite.com域的文件添加下列語句(你仍然可以針對(duì)Flash 6播放器發(fā)布存放在www.someSite.com的文件):
System.security.allowDomain("store.someSite.com"); my_lc.allowDomain = function(sendingDomain) { return(sendingDomain=="store.someSite.com"); }
總的來說,如果你針對(duì)Flash 7播放器發(fā)布文件且符合以下條件,你可能要修改你的文件,添加或修改allowDomain語句:
①你編寫跨SWF文件的腳本 使用loadMovie()、MovieClip.loadMovie()、MovieClipLoader.LoadClip()或本地連接對(duì)象。
②被調(diào)用的SWF文件(任何版本)不是存放在使用安全協(xié)議(HTTPS)的站點(diǎn),或調(diào)用的和被調(diào)用的SWF文件都存放在使用安全協(xié)議(HTTPS)的站點(diǎn)。
③SWF文件不在相同的域 例如,一個(gè)文件在www.domain.com,另一個(gè)在store.domain.com。
為此你需要做以下修改:
①如果被調(diào)用的SWF文件是針對(duì)Flash 7播放器發(fā)布的,在被調(diào)用的SWF文件中包含System.security.allowDomain或LocalConnection.allowDomain語句,使用精確域名匹配。
②如果被調(diào)用的SWF文件是針對(duì)Flash 6播放器發(fā)布的,修改被調(diào)用的SWF文件,添加或修改System.security.allowDomain或LocalConnection.allowDomain語句,使用精確域名匹配(如本節(jié)前面的代碼所示)。你可以針對(duì)Flash 6或7播放器發(fā)布修改過的文件。
③如果被調(diào)用的SWF文件是針對(duì)Flash 5或以前的播放器版本發(fā)布的,針對(duì)Flash 6或7播放器發(fā)布被調(diào)用的SWF文件,添加System.security.allowDomain語句,使用精確域名匹配(如本節(jié)前面的代碼所示)。(Flash 5及以前的播放器版本不支持本地連接對(duì)象。)
出處:天極設(shè)計(jì)在線
責(zé)任編輯:qhwa
上一頁 AS代碼2:針對(duì)Flash Player7 [1] 下一頁 AS代碼2:針對(duì)Flash Player7 [3]
◎進(jìn)入論壇Flash專欄版塊參加討論
|