2012-03-22 40 views

回答

0

使用BitmapDatadraw(IDrawable)函數是簡單的,如果一切都在相同的SecurityDomain

只有在您嘗試渲染的每個加載元素的SecurityDomain接受發出請求的代碼的域(可能是swf的域)時,纔可以使用此技術。

查閱BitmapData.draw(IDrawable)的文檔。它說,它拋出一個SecurityError時:

源對象及(就Sprite或MovieClip對象的情況下) 所有子對象不是來自同一個域的 來電者,或有而不是呼叫者可通過調用Security.allowDomain()方法的 訪問的內容。 不適用於應用程序安全沙箱中的AIR內容。

這樣的結果是,如果你使用的標準Loader加載域中的內容,你不用管,你不能創建包含內容的任何級DisplayObjectContainer位圖「快照」(除非它發生允許所有域名或明確的域名訪問)。如果您使用來控制這些域,您應該可以通過使用crossdomain.xml(用於非swf內容)或Security.allowDomain()調用swf內容來使其工作。加載的swf必須撥打allowDomain。 (另外,如果您只是試圖從其他域(如JPG或GIF)獲取包含靜態圖像的快照,則可以直接加載圖像數據,並使用適當的AS3解碼器將其解碼爲位圖(而不是使用標準Loader),它允許你利用它的位圖快照)

0

簡短的回答: 號但是,有一個解決辦法,如果你有機會到任何服務器端技術,比如PHP,你部署瑞士法郎。解決方法是使用PHP爲您代理圖像。 PHP腳本使用cUrl加載圖像,並且yuor swf可以加載它們,因爲它們來自同一個域。

這是一個簡單的代理腳本的例子。在生產環境中,您應該加強腳本以防止未經授權的用戶訪問它。

<?php 

$post_data = $HTTP_RAW_POST_DATA; 

$header[] = "Content-type: text/xml"; 
$header[] = "Content-length: ".strlen($post_data); 

$ch = curl_init($_GET['path']); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 

if (strlen($post_data)>0){ 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
} 

$response = curl_exec($ch);  
$response_headers = curl_getinfo($ch);  

if (curl_errno($ch)) { 
    print curl_error($ch); 
} else { 
    print_r(curl_getinfo($ch)); 
    curl_close($ch); 
    header('Content-type: ' . $response_headers['content-type']); 
    print $response; 
} 


?> 
+0

這將確定地解決我的問題。謝啦。 – pikar 2012-08-20 05:24:08

相關問題