Flex之无差别跨域请求
文章目录
这次说说Flex的事
最近帮同事做了一个demo, 请求其他网站的一个图片,并在本地对这个图片进行一定的修改,这个时候就涉及到Flex的跨域问题.
Flex请求其他网站的图片是没有问题的,但是一旦需要在本地对图片进行修改的话,就需要对方网站的crossdomain.xml进行权限开放了,如果对方没有对你的域名设置为allow-access-from,那么你在Flex本地是不能对其进行直接修改的,那要怎么办呢?
实际上Flex本身提供了一种可以直接绕过跨域沙箱限制的方法,那就是在本地直接将对方网站图片转化为二进制数据再次重新载入就能绕过沙箱限制了,代码如下
<?xml version="1.0"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="onInit()">
<fx:Script><![CDATA[
private var loader:Loader = new Loader();
private function onInit():void {
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImage_over)
}
private function draw():void {
var lc:LoaderContext = new LoaderContext();
loader.load(new URLRequest(image_url.text), lc);
}
private function loadImage_over(e:Event):void {
try {
var bitmap:DisplayObject = loader.content;
} catch (err:SecurityError) {
loader.loadBytes(loader.contentLoaderInfo.bytes);// ?plusmn;î?l:?Ucirc;6pn?}e
return;
}
var textfield:TextField = new TextField();
textfield.text = text.text;
var textFmt:TextFormat = new TextFormat();
textFmt.color = 0xFF0000;
textFmt.size = 10;
textFmt.align = "left";
textFmt.bold = true;
textfield.setTextFormat(textFmt);
textfield.autoSize = TextFieldAutoSize.LEFT;
var bitmapdata:BitmapData = new BitmapData(bitmap.width, bitmap.height);
bitmapdata.draw(bitmap);
bitmapdata.draw(textfield);
canvas.width = bitmap.width;
canvas.height = bitmap.height;
canvas.graphics.beginBitmapFill(bitmapdata);
canvas.graphics.drawRect(0, 0, canvas.width, canvas.height);
canvas.graphics.endFill();
}
]]></fx:Script>
<mx:VBox id="box">
<mx:Label text="URL:"/>
<s:TextInput id="image_url"/>
<mx:Label text="地址:"/>
<s:TextInput id="text"/>
<s:Button click="image.source = image_url.text" label="获取"/>
<s:Button click="draw()" label="画图"/>
<mx:Image id="image"/>
<mx:Canvas id="canvas" borderStyle="solid">
</mx:Canvas>
</mx:VBox>
</s:Application>