我正在尝试制作一个显示谷歌图片搜索结果的 Flash 程序。由于结果都在我不拥有的不同域上,因此我无法通过正常的 crossdomain.xml 过程来做到这一点。
这是否意味着我正在尝试做的事情是不可能的?当您将其作为独立应用程序运行时,它可以工作,而不是在网站上运行。
我尝试使用谷歌搜索并找到了一些如何绕过它的方法,但它们都不起作用。我应该继续寻找吗?
我正在尝试制作一个显示谷歌图片搜索结果的 Flash 程序。由于结果都在我不拥有的不同域上,因此我无法通过正常的 crossdomain.xml 过程来做到这一点。
这是否意味着我正在尝试做的事情是不可能的?当您将其作为独立应用程序运行时,它可以工作,而不是在网站上运行。
我尝试使用谷歌搜索并找到了一些如何绕过它的方法,但它们都不起作用。我应该继续寻找吗?
您可以在没有 crossdomain.xml 文件的情况下从另一个域加载图像。当您尝试访问位图数据或尝试以任何方式修改位图时,您将收到错误消息。
以下代码在网络上运行良好。
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。如果您确实需要访问像素数据(复制/更改/等),您可以尝试以下方法之一:
以下是帖子中的片段以供参考:
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
]));
}