創作內容

0 GP

flex和flash的跨網域存取

作者:怪鳥│2010-10-18 08:46:06│巴幣:0│人氣:941
為了安全性的考量,flash或flex ActionScript在3.0版大幅修改了跨網域(cross-domain)存取的設定方式。

以下假設有A、B兩台server,A server存放了swf檔及網頁,但是圖片放在B server上。client端連到了A server後如要觀看圖片都要透過從A server的swf檔讀取B server的資料。

在這樣的情況下,html網頁是可以直接將<img src=""/>指向B server的圖片,例如<img src="http://b.example.com/image.png"/>但是flash就不行,當swf檔企圖讀取時就會跳出安全性錯誤。

解決方法:

1.在B server網頁的root下放置crossdomain.xml,內容是

<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="a server的ip或domain" />
</cross-domain-policy>

例如A server是a.example2.com.tw,則xml檔為
<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="a.example2.com.tw" />
</cross-domain-policy>

注意,一定要在根目錄下,不能在虛擬目錄下。舉例:http://b.example.com/dir/crossdomain.xml這樣是不行的

2.A server的swf檔內容必須增加這幾行
Security.loadPolicyFile("http://b.example.com/crossdomain.xml");
//讀取B server的安全性設定檔
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;
//設定安全性物件
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(event:Event):void{
          Image.source = event.currentTarget.content;
});
loader.load(new URLRequest(encodeURI("http://b.example.com/image.png")), loaderContext);
//宣告Loader讀取圖片,並在load時予許跨網域存取

有些麻煩,但是為了user的安全。

參考網頁
http://blancer.com/tutorials/30030/quick-tip-a-guide-to-cross-domain-policy-files/
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=546006
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Flex|flash|actionscript

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★stbird 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:IIS7與IIS6不同的... 後一篇:在ASP.NET中取得全...

追蹤私訊切換新版閱覽

作品資料夾

ms0489223每天換一首Loop的人
酸欠少女- Sayuri看更多我要大聲說20小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】