本發(fā)明涉及計算機技術領域,特別涉及一種flash跨域訪問數(shù)據(jù)的方法及裝置。
背景技術:
目前,flash被廣泛的用于網(wǎng)頁設計和網(wǎng)頁動畫制作及網(wǎng)頁視頻播放等,大多數(shù)的視頻網(wǎng)站包括直播網(wǎng)站都采用flash做為其視頻播放器,并且大多數(shù)的網(wǎng)頁游戲、大多數(shù)的郵箱等網(wǎng)頁應用程序都使用flash來開發(fā)一些功能,flash的具體使用文件是swf(shockwaveflash)文件,flash在設計之初從安全的角度考慮到了跨域(跨域指在一個網(wǎng)站域名下訪問另一個網(wǎng)站域名下的數(shù)據(jù))的安全問題,因為跨域訪問一些文件或者資源有移動的危險性,該過程超過了網(wǎng)站自身的范圍,對于站外的資源無法審核其安全性。而對于一些跨域訪問的需求,flash提供了一種策略,通過配置策略文件crossdomain.xml文件來設置可以跨哪些域名來訪問數(shù)據(jù),而如果對于某些網(wǎng)站的網(wǎng)站域名沒有在配置策略文件中進行配置是無法訪問其中的數(shù)據(jù)的。
技術實現(xiàn)要素:
本發(fā)明實施例提供了一種flash跨域訪問數(shù)據(jù)的方法及裝置,實現(xiàn)了跨域獲取數(shù)據(jù)的方法,提高了flash程序的靈活性和數(shù)據(jù)訪問的便捷性。
第一方面,本申請?zhí)峁┝艘环Nflash跨域訪問數(shù)據(jù)的方法,所述方法包括:
編寫加載第一動畫文件的第二動畫文件,所述第一動畫文件為第三方網(wǎng)站域名下的動畫文件;
查找所述第二動畫文件具有的下載組件類及對應的下載組件接口;
在所述下載組件類中獲取下載所述第一動畫文件的目標下載組件類,將所述目標下載組件類實例化為實例化對象,所述實例化對象包括對應的下載組件接口;
調(diào)用所述實例化對象對應的目標下載組件接口,獲取所述第三方網(wǎng)站中的數(shù)據(jù)。
進一步的,所述編寫加載第一動畫文件的第二動畫文件的步驟,包括:
定義一個動畫文件加載實例;
注冊動畫文件加載完成的回調(diào)函數(shù);
創(chuàng)建請求第一動畫文件的接口;
調(diào)用所述接口加載所述第一動畫文件;
編寫所述回調(diào)函數(shù)。
進一步的,所述查找所述第二動畫文件具有的下載組件類及對應的下載組件接口的步驟,包括:
查找所述第二動畫文件使用的符號,所述符號包括所有使用的包名,所有的類名,所有的函數(shù)名和變量名;
通過反編譯工具讀取所述使用的符號,確定所述第二動畫文件具有的下載組件類及對應的下載組件接口。
進一步的,所述在所述下載組件類中獲取下載所述第一動畫文件的目標下載組件類,將所述目標下載組件類實例化為實例化對象的步驟,具體包括:
調(diào)用類判斷接口判斷是否存在所述目標下載組件類;
若是,則調(diào)用類獲取接口獲取所述目標下載組件類;
根據(jù)所述目標下載組件類,創(chuàng)建所述目標下載組件類的實例化對象,確定所述實例化對象的下載組件接口。
進一步的,所述調(diào)用所述實例化對象對應的目標下載組件接口,獲取所述第三方網(wǎng)站中的數(shù)據(jù)的步驟,具體包括:
獲取所述實例化對象對應的目標下載組件接口,所述目標下載組件接口為用戶需要獲取所述第三方網(wǎng)站中數(shù)據(jù)的接口;
調(diào)用所述目標下載組件接口獲取所述第三方網(wǎng)站中的數(shù)據(jù)。
第二方面,本申請?zhí)峁┝艘环Nflash跨域訪問數(shù)據(jù)的裝置,所述裝置包括:
編寫單元,用于編寫加載第一動畫文件的第二動畫文件,所述第一動畫文件為第三方網(wǎng)站域名下的動畫文件;
查找單元,用于查找所述第二動畫文件具有的下載組件類及對應的下載組件接口;
實例化單元,用于在所述下載組件類中獲取下載所述第一動畫文件的目標下載組件類,將所述目標下載組件類實例化為實例化對象,所述實例化對象包括對應的下載組件接口;
調(diào)用單元,用于調(diào)用所述實例化對象對應的目標下載組件接口,獲取所述第三方網(wǎng)站中的數(shù)據(jù)。
進一步的,所述編寫單元具體用于:
定義一個動畫文件加載實例;
注冊動畫文件加載完成的回調(diào)函數(shù);
創(chuàng)建請求第一動畫文件的接口;
調(diào)用所述接口加載所述第一動畫文件;
編寫所述回調(diào)函數(shù)。
進一步的,所述查找單元具體用于:
查找所述第二動畫文件使用的符號,所述符號包括所有使用的包名,所有的類名,所有的函數(shù)名和變量名;
通過反編譯工具讀取所述使用的符號,確定所述第二動畫文件具有的下載組件類及對應的下載組件接口。
進一步的,所述實例化單元具體用于:
調(diào)用類判斷接口判斷是否存在所述目標下載組件類;
若是,則調(diào)用類獲取接口獲取所述目標下載組件類;
根據(jù)所述目標下載組件類,創(chuàng)建所述目標下載組件類的實例化對象,確定所述實例化對象的下載組件接口。
進一步的,所述調(diào)用單元具體用于:
獲取所述實例化對象對應的目標下載組件接口,所述目標下載組件接口為用戶需要獲取所述第三方網(wǎng)站中數(shù)據(jù)的接口;
調(diào)用所述目標下載組件接口獲取所述第三方網(wǎng)站中的數(shù)據(jù)。
本發(fā)明實施例中通過編寫加載第一動畫文件的第二動畫文件,查找所述第二動畫文件具有的下載組件類及對應的下載組件接口,在下載組件類中獲取下載第一動畫文件的目標下載組件類,將目標下載組件類實例化為實例化對象,調(diào)用實例化對象對應的目標下載組件接口,獲取第三方網(wǎng)站中的數(shù)據(jù)。本發(fā)明實施例通過編寫一個flash文件來加載第三方網(wǎng)站域名下的flash文件,然后通過反射機制獲取到該網(wǎng)站的下載組件接口,最后通過該下載組件接口來獲取所感興趣的內(nèi)容。這樣通過編寫的flash文件去讓該網(wǎng)站域名下的flash文件去下載該網(wǎng)站的數(shù)據(jù),實際實現(xiàn)下載的是該域名下的flash文件去下載,所以域名檢測判斷是同一個域名,從而實現(xiàn)了跨域獲取數(shù)據(jù)的方法,提高了flash程序的靈活性和數(shù)據(jù)訪問的便捷性。
附圖說明
圖1是本發(fā)明實施例中flash跨域訪問數(shù)據(jù)的方法的一個實施例示意圖;
圖2圖1所示實施例中步驟s1的具體實施例流程示意圖;
圖3圖1所示實施例中步驟s2的具體實施例流程示意圖;
圖4圖1所示實施例中步驟s3的具體實施例流程示意圖;
圖5圖1所示實施例中步驟s4的具體實施例流程示意圖;
圖6是本發(fā)明實施例中flash跨域訪問數(shù)據(jù)的裝置的一個實施例示意圖。
具體實施方式
為了使本技術領域的人員更好地理解本發(fā)明方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的實施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤?。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設備固有的其它步驟或單元。
請參閱圖1,本發(fā)明實施例中flash跨域訪問數(shù)據(jù)的方法的一個實施例包括:
s1、編寫加載第一動畫文件的第二動畫文件;
其中,所述第一動畫文件為第三方網(wǎng)站域名下的動畫文件;第一動畫文件、第二動畫文件可以是swf文件。
s2、查找第二動畫文件具有的下載組件類及對應的下載組件接口;
由于動畫文件的格式是公開的,以swf文件為例,可以采取一些方式對swf文件進行查找,知道這個swf文件具有哪些類,保護哪些函數(shù)接口等。
s3、在下載組件類中獲取下載第一動畫文件的目標下載組件類,將目標下載組件類實例化為實例化對象;
其中,該實例化對象包括對應的下載組件接口。
s4、調(diào)用實例化對象對應的目標下載組件接口,獲取第三方網(wǎng)站中的數(shù)據(jù)。
本發(fā)明實施例中通過編寫加載第一動畫文件的第二動畫文件,查找所述第二動畫文件具有的下載組件類及對應的下載組件接口,在下載組件類中獲取下載第一動畫文件的目標下載組件類,將目標下載組件類實例化為實例化對象,調(diào)用實例化對象對應的目標下載組件接口,獲取第三方網(wǎng)站中的數(shù)據(jù)。本發(fā)明實施例通過編寫一個flash文件來加載第三方網(wǎng)站域名下的flash文件,然后獲取到該網(wǎng)站的下載組件接口,最后通過該下載組件接口來獲取所感興趣的內(nèi)容,這樣通過編寫的flash文件去讓該網(wǎng)站域名下的flash文件去下載該網(wǎng)站的數(shù)據(jù),實際實現(xiàn)下載的是該域名下的flash文件去下載,所以域名檢測判斷是同一個域名,從而實現(xiàn)了跨域獲取數(shù)據(jù)的方法,提高了flash程序的靈活性和數(shù)據(jù)訪問的便捷性。
如圖2所示,所述步驟s1具體可以包括:新建第二動畫文件,并在所述第二動畫文件中編寫代碼實現(xiàn)如下步驟:
s11、定義一個動畫文件加載實例;
具體的,仍以swf文件為例,可以首先定義一個actionscript的loader實例。而在actionscript中提供了一個loader類用來加載swf文件,或者是圖片jpg,gif動畫等文件。因此定義一個swf文件加載實例具體實現(xiàn)如下:
varswfloader:loader=newloader();
s12、注冊動畫文件加載完成的回調(diào)函數(shù);
本步驟中仍以swf文件為例,在actionscript中提供了一個loader實例的接口,用來注冊加載完成事件,當loader加載完成一個swf文件后,會回調(diào)這個注冊的函數(shù),以告訴它swf文件已經(jīng)加載完成。在loader中提供了一個addeventlistener接口用來注冊事件。
接口具體原型如下:
addeventlistener(type:string,
listener:function,
usecapture:boolean=false,
priority:int=0,
useweakreference:boolean=false)
其中,第一個參數(shù)type:string用來表示注冊的事件類型,對應于本文則是event.complete,表示注冊swf加載完成事件;第二個參數(shù)listener:function用來表示注冊的完成事件完成后的回調(diào)函數(shù),用于觸發(fā)回調(diào)函數(shù)執(zhí)行;第三個參數(shù)priority:int用于標示事件的優(yōu)先級,使用默認值0;第四個參數(shù)useweakreference:boolean指定回調(diào)函數(shù)是弱應用還是強引用,使用默認值false。
s13、創(chuàng)建請求第一動畫文件的接口;
仍以swf文件為例,創(chuàng)建請求動畫文件的接口即,創(chuàng)建請求swf的接口urlrequest,在actionscript提供接口用來從網(wǎng)絡或者本地請求一個swf文件,具體接口如下:
urlrequest(url:string=null)
其中,參數(shù)url:string標示傳入的url地址或者本地路徑。
s14、調(diào)用所述接口加載所述第一動畫文件;
在動畫文件為swf文件時,可以調(diào)用loader實例的接口來加載請求的swf文件,具體接口如下:
load(request:urlrequest,context:loadercontext=null)
其中,參數(shù)request:urlrequest就是加載的請求對象,就是步驟s13中創(chuàng)建的urlrequest對象。
s15、編寫所述回調(diào)函數(shù)。
編寫回調(diào)函數(shù)swfloadcompletehandler,此函數(shù)即是上面調(diào)用的注冊加載完成的回調(diào)函數(shù)。
進一步的,如圖3所示,上述步驟s2具體可以包括:
s21、查找所述第二動畫文件使用的符號;
其中,所述符號包括所有使用的包名,所有的類名,所有的函數(shù)名和變量名;
s22、通過反編譯工具讀取所述使用的符號,確定所述第二動畫文件具有的下載組件類及對應的下載組件接口。
由于swf文件的格式是公開的,很容易找到第三方的反編譯工具,可以對swf進行反編譯,swf文件會存儲所有使用的符號,比如會存儲所有的包名,所有的類名,所有的函數(shù)名和變量名等,那么通過反編譯工具是可以讀取到這些名字,可以知道這個swf文件保護哪些類,哪些函數(shù)接口,從而可以為后續(xù)使用反射機制來獲取到這些類及接口。
其中,下載組件接口具有從網(wǎng)站中下載數(shù)據(jù)的方法,該類通常的實現(xiàn)如下:
1.定義一個數(shù)據(jù)下載對象。
publicvarurlloader:urlloader=newurlloader();
2.定義一個數(shù)據(jù)下載的接口。
publicfunctiondownload(url:string):void{
urlloader.load(newurlrequest(url));
...}
其中參數(shù)url:string則是需要下載的數(shù)據(jù)的網(wǎng)站url地址。通過傳入這個想要獲取數(shù)據(jù)的url地址則可以獲取任意想要獲取該網(wǎng)站的數(shù)據(jù)。其中urlloader則是執(zhí)行具體的下載邏輯,數(shù)據(jù)下載完成后會存儲在urlloader中,通過訪問urlloader則可以獲取到下載的數(shù)據(jù)。只要從該網(wǎng)站的swf中找到上述的功能邏輯,則說明該swf是提供下載組件的,則可以利用該下載組件下載想要的數(shù)據(jù)。至此,通過這個步驟就實現(xiàn)了查找出一個swf文件中提供的數(shù)據(jù)下載接口。
進一步的,如圖4所示,上述步驟s3具體可以包括:
s31、調(diào)用類判斷接口判斷是否存在目標下載組件類,若是,則執(zhí)行步驟s32;
s32、調(diào)用類獲取接口獲取目標下載組件類;
s33、根據(jù)目標下載組件類,創(chuàng)建目標下載組件類的實例化對象,確定所述實例化對象的下載組件接口。
仍以swf文件為例,首先在s1中我們通過loader的接口加載了一個第三方的swf文件,然后通過步驟s2的反編譯可以看到swf有哪些類包含有下載組件接口,進而可以通過反射機制獲取該下載組件接口來進行調(diào)用。先舉例假設swf有一個類名是classdownload,該類中有一個方法publicfunctiondownload(url:string):void{
urlloader.load(newurlrequest(url));
}
該方法則是用來傳入一個下載數(shù)據(jù)的地址,然后調(diào)用loader來下載數(shù)據(jù)。那么可以通過反射機制則可以實例化classdownload的對象,并調(diào)用該下載數(shù)據(jù)的下載組件接口下載。那么通過反射機制的具體調(diào)用方法是如下:
(1)先調(diào)用loader的接口判斷是否存在這個目標下載組件類。
通過loader的接口hasdefinition(上述類判斷接口)則可以判斷第三方swf是否具有這個目標類。原型如下:
hasdefinition(name:string):boolean
其中,參數(shù)name:string則是填入類的名字(目標下載組件類的名字),返回值則是true則存在,是false則不存在。調(diào)用如下:
varbdefine:boolean=swfloader.contentloaderinfo.applicationdomain.hasdefinition("classdownload");
其中,swfloader則是步驟s1中加swf的loader實例,參數(shù)"classdownload"則是假設存在這個類。返回值bdefine標示是否存在這個類。
(2)調(diào)用loader的接口獲取這個目標下載組件類。
通過loader的接口getdefinition(上述類獲取接口)則可以獲取到這個類。原型如下:
getdefinition(name:string):object
其中,參數(shù)name:string則是類的名字,返回值則是目標類。
varcclass:class=swfloader.contentloaderinfo.applicationdomain.getdefinition("classdownload")asclass;
其中swfloader則是步驟s1中加swf的loader實例,參數(shù)"classdownload"則是假設存在這個目標下載組件類。返回值cclass則是對應的classdownload這個目標下載組件類。
(3)實例化類的對象。
通過步驟(2)獲取到了類cclass后,可以通過其創(chuàng)建一個實例化對象,確定該實例化對象的接口。
具體如下:
varobj:cclass=newcclass;
這樣就創(chuàng)建了一個cclass的實例對象obj。至此,通過這個步驟就實現(xiàn)通過反射機制來創(chuàng)建一個目標下載組件類的實例化對象。
進一步的,如圖5所示,上述步驟s4具體可以包括:
s41、獲取實例化對象對應的目標下載組件接口;
其中,該目標下載組件接口為用戶需要獲取所述第三方網(wǎng)站中數(shù)據(jù)的接口;
s42、調(diào)用目標下載組件接口獲取所述第三方網(wǎng)站中的數(shù)據(jù)。
通過步驟s3創(chuàng)建了一個類的實例化對象obj,從而可以直接調(diào)用其目標下載組件接口的方法,來下載需要的數(shù)據(jù)。具體如下:
假設類cclass有一個接口download(url:string),接口有一個參數(shù)url,用于存放需要獲取的數(shù)據(jù)的url地址。則可以直接通過obj對象來調(diào)用。
varstrurl:string;比如是:http://test/userinfo
obj.download(strurl);
并在數(shù)據(jù)下載完成后,數(shù)據(jù)會存放在classdownload類中的成員變量urlloader中,那么直接讀取其中的數(shù)據(jù)則是我們想要獲取的數(shù)據(jù)了。由于是通過自己編寫的swf文件去讓該第三方網(wǎng)站域名下的swf文件去下載該網(wǎng)站的數(shù)據(jù),所以實際下載的是該域名下的swf文件去下載,所以域名檢測判斷是同一個域名,所以從而實現(xiàn)了跨域獲取數(shù)據(jù)的方法。
至此,通過這個步驟就實現(xiàn)了通過反射機制獲取到的下載組件類并調(diào)用其接口,從而可以比較方便的調(diào)用第三方網(wǎng)站域名下的swf的接口。
下面介紹本發(fā)明實施例中調(diào)用動畫數(shù)據(jù)的裝置的實施例。
請參閱圖6,為本發(fā)明實施例中flash跨域訪問數(shù)據(jù)的裝置的一個實施例示意圖,該實施例中,flash跨域訪問數(shù)據(jù)的裝置包括:
編寫單元601,用于編寫加載第一動畫文件的第二動畫文件,所述第一動畫文件為第三方網(wǎng)站域名下的動畫文件;
查找單元602,用于查找所述第二動畫文件具有的下載組件類及對應的下載組件接口;
實例化單元603,用于在所述下載組件類中獲取下載所述第一動畫文件的目標下載組件類,將所述目標下載組件類實例化為實例化對象,所述實例化對象包括對應的下載組件接口;
調(diào)用單元604,用于調(diào)用所述實例化對象對應的目標下載組件接口,獲取所述第三方網(wǎng)站中的數(shù)據(jù)。
進一步的,所述編寫單元601具體用于:
新建第二動畫文件,并在所述第二動畫文件中編寫代碼實現(xiàn)如下步驟:
定義一個動畫文件加載實例;
注冊動畫文件加載完成的回調(diào)函數(shù);
創(chuàng)建請求第一動畫文件的接口;
調(diào)用所述接口加載所述第一動畫文件;
編寫所述回調(diào)函數(shù)。
進一步的,所述查找單元602具體用于:
查找所述第二動畫文件使用的符號,所述符號包括所有使用的包名,所有的類名,所有的函數(shù)名和變量名;
通過反編譯工具讀取所述使用的符號,確定所述第二動畫文件具有的下載組件類及對應的下載組件接口。
進一步的,所述實例化單元603具體用于:
調(diào)用類判斷接口判斷是否存在所述目標下載組件類;
若是,則調(diào)用類獲取接口獲取所述目標下載組件類;
根據(jù)所述目標下載組件類,創(chuàng)建所述目標下載組件類的實例化對象,確定所述實例化對象的下載組件接口。
進一步的,所述調(diào)用單元604具體用于:
獲取所述實例化對象對應的目標下載組件接口,所述目標下載組件接口為用戶需要獲取所述第三方網(wǎng)站數(shù)據(jù)的接口;
調(diào)用所述目標下載組件接口獲取所述第三方網(wǎng)站中的數(shù)據(jù)。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質(zhì)脫離本發(fā)明各實施例技術方案的精神和范圍。