在製作放置於外部的 Flash Game 時,有利用到 Facebook Graph API 去撈使用者的顯示圖片(https://graph.facebook.com/使用者UID/picture,會回傳位於 http://profile.ak.fbcdn.net/ 的圖片網址),但由於 Flash 中的安全性設置,若有裝 Flash Player Debug 版,就會跳出這樣的錯誤訊息
需要指定原則檔,但是在載入媒體時,尚未指定 checkPolicyFile 指標。
Google 了一下,找到了這篇 Blog,依照其中的 code:
Security.loadPolicyFile("http://profile.ak.fbcdn.net/crossdomain.xml");
var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;
context.applicationDomain = ApplicationDomain.currentDomain;
依照這樣做的話就可避免引發錯誤了 😛
==
2010/11/16 更新:
但若無法正確對應,其實是會傳回位於 http://b.ak.fbcdn.net/
或 http://static.ak.fbcdn.net/
的預設人影圖的,這一樣有 crossdomain.xml
,但載入後似乎沒有解決問題,所以,我們可以採用另一種方法,透過同網域的伺服器端程式處理,這樣就一定會是同網域。
以 ASP.NET 為例,可以開一個 ashx
檔,然後在 ProcessRequest
中這樣寫:
context.Response.ContentType = "image/Jpeg"
Dim durl As String = Common.Fn.GetRequestQueryString("durl")
Dim width, height As Integer
Dim wc As WebClient = New WebClient()
'Dim ms As MemoryStream = New MemoryStream(wc.DownloadData(durl))
'20110330修正: 直接輸出即可
context.Response.BinaryWrite(wc.DownloadData(durl))
'Dim image As System.Drawing.Image = New Drawing.Bitmap(ms)
'width = image.Width
'height = image.Height
'Dim img As System.Drawing.Bitmap = New System.Drawing.Bitmap(50, 50)
'Dim graphic As Drawing.Graphics = Drawing.Graphics.FromImage(img)
'graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
'graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
'graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
'graphic.DrawImage(image, 0, 0, 50, 50)
'image.Dispose()
'Dim ms_r As New System.IO.MemoryStream()
'img.Save(ms_r, System.Drawing.Imaging.ImageFormat.Jpeg)
'context.Response.ClearContent()
'context.Response.BinaryWrite(ms_r.ToArray())
'img.Dispose()
'graphic.Dispose()
然後在 Flash 中就可以醬子呼叫:
http://你的網址/上面範例.ashx?durl=http://graph.facebook.com/使用者ID/picture
感謝網友 aladdin
的回覆指正。
不需要再做一個drawImage的動作,直接把你收到的ResponseStream原原本本的丟往前端即可。
Dim wc As WebClient = New WebClient()
context.Response.BinaryWrite(wc.DownloadData(durl))
感謝指正 ~