如何从Flex中的HTML控件获取所有图像?
答
您实际上可以使用HTML文档DOM并询问所有img标签。这种方式更清洁。
一旦你得到了DOM,这是所有的标准,所以你可以检查HTML DOM documentation如果你不确定的东西。
下面是快速示例。我只是写onComplete函数,因为它会在Taurayi的例子中调用
var _imagesSrc:Array= [];
private function onComplete(e:Event):void
{
var htmlLoader:HTMLLoader = e.target as HTMLLoader;
var doc:* = htmlLoader.window.document; //use void (*) type for DOM objects
var imgTags:* = doc.getElementsByTagName("img");
if(imgTags)
{
for(var i:int=0;i<imgTags.length;i++)
{
var src:* = imgTags[i].getAttribute("src"); //not sure about return type here, could also be a String
if(src)
_imagesSrc.push(src.toString());
}
}
}
答
那么一个想法是,你加载的HTML页面使用HTMLLoader
,然后当它已经加载你得到的来源。然后使用解析器或正则表达式,可以提取<img />
标记的src
属性的值。 src
属性的值将成为您加载页面上图像的URL。然后使用Loader
和上述网址,您可以将它们加载到您的Flash应用程序中。
下面是一个例子:
Main.as(文档类):
package
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.html.HTMLLoader;
import flash.net.URLRequest;
public class Main extends Sprite
{
public function Main():void
{
var htmlLoader:HTMLLoader = new HTMLLoader();
htmlLoader.addEventListener(Event.COMPLETE, onComplete);
htmlLoader.width = stage.stageWidth;
htmlLoader.height = stage.stageHeight;
htmlLoader.load(new URLRequest("http://www.wampserver.com/"));
}// end function
private function onComplete(e:Event):void
{
var htmlLoader:HTMLLoader = e.target as HTMLLoader;
var body:String = htmlLoader.window.document.body.outerHTML;
var imgTags:Array = getImgTags(body);
var src:String = getSrc(imgTags[1]);
trace(src); // output: http://www.wampserver.com/wp-content/themes/wampserver/img/home-title.png
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
loader.load(new URLRequest(src));
}// end function
private function onLoaderComplete(e:Event):void
{
var loader:Loader = (e.target as LoaderInfo).loader;
addChild(loader);
}// end function
private function getImgTags(source:String):Array
{
return source.match(/(<img.*?>)/g);
}// end function
private function getSrc(imgTag:String):String
{
return imgTag.match(/src="(.*?)"/)[1];
}// end function
}// end class
}// end package
请记住,这只是一个想法,也有一些明显的缺陷。
+0
看起来不错:)谢谢!我将首先尝试DOM对象方法,看看它是否可行。 – Afra 2012-02-16 15:18:24
+1不知道我是如何错过 – Taurayi 2012-02-16 14:02:08
当我下班回家时,我会尝试这种方法。谢谢! – Afra 2012-02-16 15:17:42