【问题标题】:Capturing frame of external swf and SecurityDomain捕获外部swf和SecurityDomain的帧
【发布时间】:2012-03-22 08:34:58
【问题描述】:

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

【问题讨论】:

    标签: actionscript-3 flash apache-flex actionscript


    【解决方案1】:

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

    只有当您尝试渲染的每个已加载元素的 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),它允许您对其进行位图快照。)

    【讨论】:

      【解决方案2】:

      简短的回答:没有。 但是,如果您可以访问部署 swf 的任何服务器端技术(例如 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;
      }
      
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-29
        • 2014-04-21
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多