首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部swf和SecurityDomain的帧捕获

外部swf和SecurityDomain的帧捕获
EN

Stack Overflow用户
提问于 2012-03-22 16:34:59
回答 2查看 257关注 0票数 0

有没有办法捕获帧作为swf的位图加载与主应用程序不同的安全域?

EN

回答 2

Stack Overflow用户

发布于 2012-03-23 05:56:23

如果所有内容都在同一个SecurityDomain中,那么使用BitmapDatadraw(IDrawable)函数就很简单。

只有当您试图呈现到的每个已加载元素的SecurityDomain接受发出请求的代码域(可能是swf域)时,才可以使用此技术。

查看BitmapData.draw(IDrawable)的文档。它说在以下情况下会抛出SecurityError

Sprite源对象及其所有子对象(如果是

或MovieClip对象)并不与调用方来自相同的域,或者不在调用方可以通过调用Security.allowDomain()方法访问的内容中。此限制不适用于应用程序安全沙箱中的AIR内容。

这样做的结果是,如果您使用标准Loader从不受控制的域加载内容,则无法创建包含该内容的任何DisplayObjectContainer的位图“快照”(除非恰好允许从所有域或您的域显式访问)。如果您确实控制了域,您应该能够通过对swf内容使用crossdomain.xml (对于非swf内容)或Security.allowDomain()调用来使其工作。加载的swf必须进行allowDomain调用。

(顺便说一句,如果您只是尝试获取快照,包括来自其他域的静态图像,例如JPG或GIF,则可以直接加载图像数据,并使用适当的AS3解码器(而不是使用标准Loader)将其解码为位图,从而允许您拍摄位图快照。)

票数 0
EN

Stack Overflow用户

发布于 2012-03-23 07:50:28

简短的回答是:不。但是,如果您可以访问任何服务器端技术,例如在部署swf时使用PHP,则有一个变通方法。修复方法是使用PHP为您代理图像。PHP脚本使用cUrl加载图像,yuor swf能够加载它们,因为它们来自相同的域。

下面是一个简单的代理脚本示例。在生产环境中,您应该加强脚本以防止未经授权的用户访问它。

代码语言:javascript
复制
<?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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9818752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档