AS3中的Crossdomain,想要显示Google图片搜索结果

时间:2012-09-22 14:06:33

标签: actionscript-3 cross-domain

我正在尝试制作一个显示谷歌图片搜索结果的Flash程序。 由于结果都在我不拥有的不同域上,因此无法通过正常的crossdomain.xml过程执行此操作。

这是否意味着我想做的事情是不可能的? 当您将其作为独立应用程序运行时,它可以运行,而不是在网站上运行。

我尝试使用谷歌搜索,并找到了一些如何绕过它的方法,但它们都不起作用。我应该继续看吗?

2 个答案:

答案 0 :(得分:1)

您可以在没有crossdomain.xml文件的情况下从其他域加载图像。当您尝试访问bitmapdata或尝试修改位图时,您将收到错误。

以下代码在网络上运行良好。

public class Main extends Sprite 
{

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);


        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
        loader.load(new URLRequest("https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTg2aSe9QhKeZrwNNM3Uyfstmsh24DWgH-Uhr-Xn-0lltyqhgvLRw"));
        addChild(loader);
    }

    private function onComplete(e:Event):void 
    {
        try {
            var bmp:Bitmap = e.target.content;  
        }
        catch (err:Error)
        {
            trace(err.message);
        }

    }

}
}

答案 1 :(得分:0)

正如Baris所提到的,如果您只显示数据,则在托管图像的服务器上不需要crossdomain.xml。 如果确实需要访问像素数据(复制/更改/等),可以尝试以下方法之一:

  1. 首先使用服务器端脚本在本地服务器上缓存映像,然后在闪存中加载。
  2. 使用URLLoader将图像作为二进制数据加载,然后将字节传递给loader类。看看Keita's article
  3. 以下是该帖子的摘录:

    var urlLoader:URLLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
    urlLoader.addEventListener(Event.COMPLETE, urlLoaderComplete);
    
    var url:String = "http://www.adobe.com/images/shared/product_mnemonics/50x50/flash_player_50x50.gif";
    urlLoader.load(new URLRequest(url));
    
    function urlLoaderComplete(e:Event):void
    {
      var loader:Loader = new Loader();
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
      loader.loadBytes(urlLoader.data as ByteArray);
    }
    
    
    function loaderComplete(e:Event):void
    {
      var bmp:Bitmap = e.currentTarget.content as Bitmap;
      addChild(bmp);
      var bitmapData:BitmapData = bmp.bitmapData
      bitmapData.applyFilter(bitmapData, bitmapData.rect, new Point(0, 0),
        new ColorMatrixFilter([
          0, 0, 0, 0, 0,
          1, 1, 0, 0, 0,
          0, 0, 1, 0, 0,
          0, -1, -1, 1, 0
      ]));
    }