Как получить все изображения из HTML-элемента управления во Flex? - PullRequest
1 голос
/ 16 февраля 2012

У меня есть элемент управления HTML во Flex, который успешно загружает страницу. Можно ли как-нибудь извлечь или получить все изображения из этого HTML-элемента управления и показать их?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Вы можете использовать HTML-документ DOM и спрашивать обо всех тегах img. Так намного чище.

Как только вы получаете DOM, все становится стандартным, поэтому вы можете проверить HTML DOM документацию , если вы не уверены в чем-либо.

Вот быстрый пример. Я просто напишу функцию 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());
        }
     }
}
2 голосов
/ 16 февраля 2012

Что ж, идея заключается в том, что вы загружаете html-страницу, используя HTMLLoader, а затем, когда она загружается, вы получаете исходный код.Затем, используя анализатор или регулярное выражение, вы извлекаете значения атрибутов src тегов <img />.Значения атрибутов src будут ссылками на изображения на странице, которую вы загрузили.Затем, используя Loader и указанные URL-адреса, вы загрузите их в ваше приложение для флэш-памяти.

Вот пример:

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

Имейте в виду, что это просто идея, естьнекоторые очевидные недостатки.

...