flash as3.0 跨域的解決辦法
發(fā)布時(shí)間:2013-07-02 13:01:24 作者:佚名
我要評(píng)論
Flash跨域問(wèn)題相信不是所有人都可以遇到,如果你在本地發(fā)布,或者說(shuō)直接Ctrl+Enter在FlashIDE中預(yù)覽,是不會(huì)遇到跨域問(wèn)題的,當(dāng)然,跨域有個(gè)前提,那就是Flash不是完全獨(dú)立的,與外界要做一些通信和交互,如果你的Flash是完全獨(dú)立的文件,沒(méi)有和外界發(fā)生任何交互和數(shù)據(jù)
Flash跨域問(wèn)題相信不是所有人都可以遇到,如果你在本地發(fā)布,或者說(shuō)直接Ctrl+Enter在FlashIDE中預(yù)覽,是不會(huì)遇到跨域問(wèn)題的,當(dāng)然,跨域有個(gè)前提,那就是Flash不是完全獨(dú)立的,與外界要做一些通信和交互,如果你的Flash是完全獨(dú)立的文件,沒(méi)有和外界發(fā)生任何交互和數(shù)據(jù)通信的話,那么你可以不考慮跨域問(wèn)題,因?yàn)檫@也不存在跨域問(wèn)題。 什么是跨域? 跨域簡(jiǎn)單的說(shuō)就是訪問(wèn)其他域名的文件或資源,比如a.com的Flash去訪問(wèn)b.com的資源,那么就會(huì)引起跨域的問(wèn)題,因?yàn)閍.com和b.com不是同一個(gè)域名。 為什么有跨域問(wèn)題? 其實(shí)不僅僅是Flash,Javascript等一些腳本也有跨域的問(wèn)題,這個(gè)主要是自身的安全機(jī)制所決定的,因?yàn)榭缬蛟L問(wèn)一些文件或資源有一定的危險(xiǎn)性,他超過(guò)了網(wǎng)站自身的范圍,對(duì)于站外的資源無(wú)法審核其安全性,在網(wǎng)絡(luò)病毒木馬日益猖獗的今天,跨域限制訪問(wèn)是其安全策略的一個(gè)重要解決手段。 跨域有什么問(wèn)題? 跨域的問(wèn)題有很多,最直接的就是所訪問(wèn)的文件被限制了,這樣一來(lái),你的Flash就不能正常工作了,所以是讓人很頭疼的一件事情。 現(xiàn)在的Flash已經(jīng)不僅僅是作為一個(gè)動(dòng)畫(huà)了,更多的有了數(shù)據(jù)交互,所以和外界的通信來(lái)作為一個(gè)互動(dòng)性比較強(qiáng)的媒介來(lái)展現(xiàn),跨域也是其中必須解決的一個(gè)問(wèn)題。 恩,那也許有人說(shuō)了,既然有跨域的問(wèn)題,那我把資源都放在同一個(gè)域名下不就可以了?恩,的確可以這樣做,但是有時(shí)候我們也會(huì)遇到訪問(wèn)外部資源的情況,而且在一個(gè)比較正規(guī)的項(xiàng)目中,F(xiàn)lash和Html往往是分開(kāi)放的,很多公司也是這樣,為了便于維護(hù)和管理,所以跨域的問(wèn)題就容易出現(xiàn)。 1、Flash自身的安全機(jī)制設(shè)置: Flash中,在IDE運(yùn)行是沒(méi)有任何安全限制的,但是發(fā)布出去的話,就會(huì)有不少限制,F(xiàn)lash有2中發(fā)布方式,一個(gè)是僅訪問(wèn)網(wǎng)絡(luò),一個(gè)是僅訪問(wèn)本地,大家可以在文件-發(fā)布設(shè)置-Flash選項(xiàng)卡中看到,注意必須是在Flash文件有效時(shí)才會(huì)有哦,如果當(dāng)前編輯的是as文件是木有這個(gè)選擇菜單的: 這里就已經(jīng)限制了Flash的安全級(jí)別,如果是只訪問(wèn)本地,那么Flash中所有的對(duì)Web的訪問(wèn)都將禁止,而只訪問(wèn)網(wǎng)絡(luò)的話,對(duì)本地的文件訪問(wèn)都將禁止,所以大家根據(jù)實(shí)際的用途來(lái)選擇,如果你希望你的Flash放到Web上,那么就選擇只訪問(wèn)網(wǎng)絡(luò),這樣的話你測(cè)試就務(wù)必放在WebService中測(cè)試了,本地運(yùn)行就會(huì)出現(xiàn)各種問(wèn)題(如果有數(shù)據(jù)通信的話),例如:測(cè)試URLhttp://127.0.0.1/123.swf。 2、ActionScript代碼設(shè)置: AS2寫(xiě)法:復(fù)制代碼代碼如下:System.security.allowDomain("*");//針對(duì)不同http資源 System.security.allowInsecureDomain("*");//針對(duì)需要安全驗(yàn)證的資源,比如httpsAS3寫(xiě)法:復(fù)制代碼代碼如下:flash.system.Security.allowDomain("*"); flash.system.Security.allowInsecureDomain("*");上面就是嚴(yán)格的寫(xiě)法,AS3還好說(shuō),大家要注意一下AS2,AS2是木有flash.system這個(gè)包的,但是你import flash.system并不會(huì)報(bào)錯(cuò),所以如果你把AS3的代碼復(fù)制進(jìn)去運(yùn)行雖然一切正常,但是實(shí)際是木有任何效果的。一定要注意! 上面的代碼就是說(shuō)允許Flash去訪問(wèn)任何URL資源,如果只想訪問(wèn)特定的URl,就把*改成該URL即可,如果多個(gè)URl,就用逗號(hào)分隔就可以了,注意allowInsecureDomain是允許訪問(wèn)帶驗(yàn)證的URL資源,比如https打頭的,如果你訪問(wèn)的只是普通http的話就不需要了。 3、html的設(shè)置:
如果你需要和頁(yè)面的JS通信,那么html里就必須有這樣一個(gè)參數(shù):復(fù)制代碼代碼如下:<param name="allowScriptAccess" value="always" />參數(shù)always表示始終允許腳本訪問(wèn),如果是never,就表示始終不允許。 4、加載外部資源: 如果你要讀取一個(gè)外部文件,比如swf,picture,mp3等等,那么就需要一個(gè)跨域策略文件(crossdomain.xml),這個(gè)其實(shí)就是一個(gè)xml文件,具體內(nèi)容是:復(fù)制代碼代碼如下:<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="www.explorechn.com" /> <allow-access-from domain="explorechn.com" /> <allow-access-from domain="223.4.119.191" /> </cross-domain-policy>這就是跨域策略文件,allow-access-from domain表示允許訪問(wèn)的URl,如果有多個(gè)依次添加,如果允許所有就一個(gè) allow-access-from domain = "*"就可以了。 需要說(shuō)明一下這個(gè)文件該怎么用,如果你的Flash在a.com下,你需要訪問(wèn)b.com的資源,那么把這個(gè)xml放在b.com的根目錄就可以自動(dòng)訪問(wèn)了,當(dāng)然,你也可以訪問(wèn)其他目錄的策略文件。復(fù)制代碼代碼如下:flash.system.Security.loadPolicyFile(URL:String);通過(guò)這個(gè)loadPolicyFile就可以主動(dòng)去加載一個(gè)安全策略文件了,注意上面是AS3的寫(xiě)法,AS2不一樣哦,參考上面的寫(xiě)法。 5、各個(gè)瀏覽器的跨域問(wèn)題: IE就不說(shuō)了,這個(gè)基本沒(méi)啥問(wèn)題,包括Flash自己生成的Html就對(duì)IE的支持做的很好,這里就說(shuō)說(shuō)Chrome和FF的問(wèn)題: 對(duì)于FLash,IE是認(rèn)object標(biāo)簽的,但是FF和Chrome是認(rèn)embed標(biāo)簽的,所以這個(gè)很重要,如果在調(diào)試的時(shí)候,發(fā)現(xiàn)firebug等工具提示"...... is not a Function",我們就要從以下地方查找原因: 1、addCallback是否成功注冊(cè) 2、allowScriptAccess是否允許always,默認(rèn)不允許 3、Flash是否完全加載完畢 一般來(lái)說(shuō),第三點(diǎn)是我們最容易遇到的,如果你的Flash沒(méi)有加載完畢就去調(diào)用函數(shù)的話,是找不到這個(gè)函數(shù)的。 這里需要注意另外一個(gè)錯(cuò)誤提示,就是"Error calling method on NPObject",如果出現(xiàn)這個(gè)錯(cuò)誤,就要小心了: 1、安全策略問(wèn)題,請(qǐng)參考上面所有的解決方案 2、自身函數(shù)錯(cuò)誤
相關(guān)文章

flash cs6鼠標(biāo)跟隨效果實(shí)現(xiàn)代碼分享
flash cs6想要實(shí)現(xiàn)鼠標(biāo)跟隨效果?該怎么制作呢?今天我們就來(lái)看看使用as2.0實(shí)現(xiàn)鼠標(biāo)跟隨效果的教程,需要的朋友可以參考下2019-05-19
Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來(lái)輸入文本,該怎么使用代碼輸入文本呢?請(qǐng)看下文詳細(xì)的教程,需要的朋友2018-03-11
flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來(lái)看看簡(jiǎn)單的例子,需要的朋友可以參考下http://www.fzitv.net/softs/408402.2018-02-28
flash cs6中怎么使用ActionScript3.0?
flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來(lái)看看詳細(xì)的教程,需要的朋友可以參考下2018-01-25
Flash中怎么實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?
本教程給大家分享一個(gè)Flash小教程,教大家在Flash CS6中怎么實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?方法很簡(jiǎn)單,感興趣的朋友歡迎前來(lái)一起分享學(xué)習(xí)2018-01-12
Flash中如何用代碼將圖片放在自己想要的舞臺(tái)位置?
本教程教腳本之家的ActionScript教程學(xué)習(xí)者在Flash中如何用代碼將圖片放在自己想要的舞臺(tái)位置,教程講解的詳細(xì),感興趣的朋友歡迎前來(lái)分享學(xué)習(xí)2017-11-20
在Flash CS6中使用with函數(shù)繪制背景圖教程
本教程教腳本之家的ActionScript教程學(xué)習(xí)者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細(xì),方法也不難,非常適合Flash新手入門(mén)學(xué)習(xí)2017-11-18
Flash怎么設(shè)置元件坐標(biāo)?flash使用代碼設(shè)置元件的坐標(biāo)的教程
Flash怎么設(shè)置元件坐標(biāo)?flash中導(dǎo)如的元件需要添加坐標(biāo),該怎么定位元件坐標(biāo)呢?下面我們就來(lái)看看flash使用代碼設(shè)置元件的坐標(biāo)的教程,需要的朋友可以參考下2017-10-11
Flash怎么制作來(lái)回?fù)u擺的花朵的動(dòng)畫(huà)?
Flash怎么制作來(lái)回?fù)u擺的花朵的動(dòng)畫(huà)?Flash中想要給花朵制作一段搖擺的動(dòng)畫(huà)效果,該怎么制作呢?下面我們就來(lái)看看詳細(xì)的教程,很簡(jiǎn)單,需要的朋友可以參考下2017-05-23
Flash怎么制作流動(dòng)七彩色的文字?想要讓文字動(dòng)起來(lái),該怎么使用flash給文字制作一個(gè)流動(dòng)七彩色的動(dòng)畫(huà)呢?下面我們就來(lái)看看詳細(xì)的教程,需要的朋友可以參考下2017-04-23











