Actionscript 3 AS3中的跨域,要显示Google图像搜索结果吗

Actionscript 3 AS3中的跨域,要显示Google图像搜索结果吗,actionscript-3,cross-domain,Actionscript 3,Cross Domain,我正在尝试制作一个flash程序来显示谷歌图片搜索结果。 由于结果都在我不拥有的不同域上,因此我无法通过正常的crossdomain.xml过程来实现这一点 这是否意味着我想做的是不可能的? 当您将其作为独立应用程序运行时,它就可以工作,而不是在网站上运行 我尝试过谷歌搜索,找到了一些绕过它的方法,但都不管用。我应该继续找吗 您可以从另一个域加载图像,而无需crossdomain.xml文件。当您尝试访问位图数据或尝试修改位图时,仍会出现错误 以下代码在web上运行良好 public class

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

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


我尝试过谷歌搜索,找到了一些绕过它的方法,但都不管用。我应该继续找吗

您可以从另一个域加载图像,而无需crossdomain.xml文件。当您尝试访问位图数据或尝试修改位图时,仍会出现错误

以下代码在web上运行良好

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);
        }

    }

}
}

您可以从另一个域加载图像,而无需crossdomain.xml文件。当您尝试访问位图数据或尝试修改位图时,仍会出现错误

以下代码在web上运行良好

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);
        }

    }

}
}

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

  • 首先使用服务器端脚本在本地服务器上缓存映像,然后加载到闪存中
  • 使用URLLoader将图像作为二进制数据加载,然后将字节传递给loader类。看一看
  • 以下是文章的片段供参考:

    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
      ]));
    }
    

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

  • 首先使用服务器端脚本在本地服务器上缓存映像,然后加载到闪存中
  • 使用URLLoader将图像作为二进制数据加载,然后将字节传递给loader类。看一看
  • 以下是文章的片段供参考:

    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
      ]));
    }
    

    你可以尝试这里的建议:它过去在某个时候对我有效,但现在我尝试它时会出现安全错误。你可以尝试这里的建议:它过去在某个时候对我有效,但现在我尝试它时会出现安全错误。这是否违反了沙箱法,这意味着它将来可能会停止工作?如果可以这么容易地绕过这些限制,为什么它们首先会存在?嗯,我只在本地测试了bytearray版本(在Flash Player和AIR中),所以可能已经被沙盒了。如果AIR不是一个选项,我会说首先在本地服务器上缓存图像,然后加载Flash Player是你最好的选择。是的,我认为这是最后的选择,但它将在互联网上公开,我不希望通过我的Web服务器限制一百万图像…这是否违反了沙箱法,这意味着它将来可能会停止工作?如果可以这么容易地绕过这些限制,为什么它们首先会存在?嗯,我只在本地测试了bytearray版本(在Flash Player和AIR中),所以可能已经被沙盒了。如果AIR不是一个选项,我会说首先在本地服务器上缓存图像,然后加载Flash Player是你最好的选择。是的,我认为这是最后的选择,但它将在互联网上公开,我不希望通过我的Web服务器限制一百万个图像。。。