2010-10-19 185 views
13

我想從AS3加載Facebook的個人資料圖像(朋友圖像),但我似乎遇到了安全問題。從ActionScript加載個人資料圖片與動作腳本3

我目前使用Actionscript 3的「官方」Adobe Facebook API工作正常。但是,在瀏覽器中運行我的應用程序時,我似乎無法加載配置文件圖像。在Flash IDE中運行時,圖像加載正常。

的圖像從https://graph.facebook.com加載並似乎有在該域的crossdomain.xml策略:

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-access-from domain="*" secure="false" /> 
<site-control permitted-cross-domain-policies="master-only" /> 
</cross-domain-policy> 

在其它來源我發現,裝載應的圖像時添加的ContextLoader我Loader對象解決問題,但這似乎並非如此:

loader = new Loader(); 
// add some listeners here... 
loader.load(new URLRequest("imageurl"), new LoaderContext(true)); 

我不太確定如何進行此刻。我希望Adobe Facebook API能夠提供這方面的幫助,但我似乎無法找到解決此問題的任何事情。

任何幫助非常感謝。

UPDATE:

我注意到,當我訪問該實際上,我重定向到Facebook的CDN,其中實際圖像存儲在瀏覽器中的圖像之一。當我使用重定向的URL對圖像url進行硬編碼時,我可以在瀏覽器中加載圖像。看來,這不是一個安全問題,而是一個重定向問題。

如果這是一個重定向問題,那麼問題就會變成;我如何讓Flash Player從重定向的URL加載圖像?

更新2:

看來,URLRequest類具有followRedirects財產僅在AIR提供。

更新3:

我目前使用一個PHP script讓我重定向的URL作爲一個變通,但這當然是遠遠不夠理想,並可能在我的服務器上一個巨大的壓力。

+0

感謝盧克!我仍然需要在不同的項目上再次使用這個解決方案,很奇怪,它只是在這裏嗎? – daidai 2010-11-09 05:33:18

+0

盧克,你是如何實現重定向的PHP?即時通訊仍然有問題。 – daidai 2010-11-09 06:15:37

+2

@ martin的方法工作得很好。問題確實是由重定向造成的。我打電話給「http:// graph.facebook.com」,它重定向到Facebook的圖像服務器。除了'http:// profile.ak.fbcdn.net',Facebook還使用其他服務器。我找到的是'http:// external.ak.fbcdn.net'。多次調用'Security.loadPolicyFile'來解決這個問題 – 5566 2011-08-11 02:37:47

回答

11

我有同樣的問題,它看起來像你必須手動加載的跨域文件您將被重定向到actionscript中的域。現在,它看起來像所有的Facebook配置文件圖像終於從域http://profile.ak.fbcdn.net/加載。

我只是說此行加載圖像之前:

Security.loadPolicyFile("http://profile.ak.fbcdn.net/crossdomain.xml"); 

這應該允許加載重定向的圖像,只要重定向域不會改變。;)

+3

它在這一點上已經改變。這是現在的有效路徑:https://fbcdn-profile-a.akamaihd.net/crossdomain.xml – weotch 2011-10-18 20:21:04

+0

今天永遠摸着這個問題。這是解決方案。謝謝! – Ribs 2012-03-13 22:32:23

+0

還有另一個域名:https://fbcdn-profile-b.akamaihd.net/crossdomain.xml,用於頁面個人資料圖片,另一個用於照片。 – kixorz 2013-05-18 23:31:30

1

它應該是一件相當容易的事情,所有的Facebook個人資料圖片都可以通過使用圖片API的圖片根找到。像這樣的鏈接:

「http://graph.facebook.com/」 +用戶ID +「/圖片」

+0

你好。我很感謝你的回答,但我不覺得你實際上是在閱讀我的問題。我知道如何從Facebook加載圖片,這是我正在處理的安全問題。 – Luke 2010-10-19 19:55:29

+0

應該沒有任何問題,因爲我自己做了很多次。你的嵌入式閃存是否啓用了scriptaccess? – longstaff 2010-10-20 06:18:36

+0

我有scriptaccess啓用,因爲一切正常。這絕對是導致問題的重定向。 – Luke 2010-10-22 21:47:38

1

我想在這裏確認馬丁的解決方案。

我的案子最後從測試的AIR平臺這是很好的偉大工程,形象成功加載的應用程序。

但是,當我將它移植到Facebook上的畫布應用程序,然後我面臨的一個問題,個人資料圖片不會一起去,它不能加載。

我所用馬丁在這裏建議。如果你跟蹤一個URL重定向,你會看到實際的圖像配置文件位於該CDN服務器而不是Facebook本身,所以你需要根據actionscript的安全沙箱加載該域的策略文件。

再次感謝。

0

完全猜測,但你可以使用的URLLoader從重定向的呼叫獲取數據,然後分析它連成一個畫面的xD

2

您可以使用URLLoader和加載圖像爲ByteArray。無論重定向如何,這似乎都可以工作。然後,您可以使用ByteArray作爲Image/BitmapImage的源代碼,或使用Loader加載字節,因爲您首先需要映像url。

例如:

var urlRequest:URLRequest = new URLRequest("http://graph.facebook.com/id/picture"); 
var urlLoader:URLLoader = new URLLoader(); 
urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
urlLoader.addEventListener(Event.COMPLETE, completeHandler); 
urlLoader.load(urlRequest);     

function completeHandler(event:Event):void 
{ 
    var byteArray:ByteArray = loader.data; 

    // Then either: 
    bitmapImage.source = byteArray; 

    // or: 
    var loader:Loader = new Loader(); 
    ... 
    loader.loadBytes(byteArray); 
    ... 
} 
0

我用兩個電話的loadPolicyFile,因爲它似乎有稱Facebook使用2級可能的CDN。這是爲我工作,但當然,一個通用的解決方案是優選的,臉譜可能會再次增加另一個CDN和事情會只停留在自己的工作 -

Security.loadPolicyFile('http://profile.ak.fbcdn.net/crossdomain.xml'); 
Security.loadPolicyFile('http://profile.cc.fbcdn.net/crossdomain.xml'); 

通過@Stiggler提出的解決方案的URLLoader可能會奏效。我沒有嘗試。但是與使用Loader對象相比,它看起來更重。

0

因爲有很多領域,其中Facebook的存儲它的照片,我寫的是使用圖像的域加載適當的政策文件中的小腳本:

import com.adobe.net.URI; 
import flash.system.Security; 

var someFacebookImageUrl:String = "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash3/c66.66.828.828/s160x160/537210_440478782684964_233907781_n.jpg"; 
var uri:URI = new URI(someFacebookImageUrl); 
Security.loadPolicyFile(uri.scheme + "://" + uri.authority + "/crossdomain.xml"); 

尼斯是,它不僅適用爲配置文件圖像,但所有圖像Facebook使用。

希望這有助於一些你!

PS:URI類是as3核心庫的一部分:http://code.google.com/p/as3corelib/

+0

這是不安全的,如果沒有進一步的工作,將導致爲每個圖像請求提供crossdomain.xml。我認爲Facebook應該通過API提供CDN域名列表:http://facebook.stackoverflow.com/a/16629923/383839 – kixorz 2013-05-18 23:30:12