Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   AIR. HTMLLoader и ссылки (http://www.flasher.ru/forum/showthread.php?t=181580)

Wazzabi 27.06.2012 04:05

AIR. HTMLLoader и ссылки
 
Добрый день!

Возник вопрос:
Как в HTMLLoader обработать клик на ссылку?
В идеале надо, чтоб при нажатии на картинку в HTMLLoader на сцену добавлялась внешний swf ролик.

Заранее благодарен

Astraport 27.06.2012 08:59

Используйте StageWebViewBridge

alatar 27.06.2012 13:16

Обработать LocationChangeEvent.LOCATION_CHANGING.

Wazzabi 27.06.2012 16:57

простите, но из выше написанного ничего не понял =(
на сцену добавляется HTMLLoader, в него загружается документ хтмл с локального диска, в документе ссылки на видео или слайдшоу. Надо определить по какой ссылке нажали и вывести нужный элемент, подгрузив соответствующий swf файл (плеер или слайдшоу). Пробовал сделать ссылки вот так:
PHP код:

<a href="#" id="video1"><img src="001.jpg" /></a

а в коде определять нажатие по ссылке с помощью javascript
Код AS3:

var link1 = html.window.dociment.getElementById("video1");
link1.addEventListener("click", playVideo);

но это не очень подходит мне, потому как могут быть несколько ссылок

alatar 27.06.2012 17:54

У вас есть две возможности, либо добавить обработчик события к каждой ссылке, как вы уже пробовали. Либо подписаться у HTMLLoader на событие LocationChangeEvent.LOCATION_CHANGING, дать вашим ссылкам осмысленный href (id элемента вы в этом событии не получите), в обработчике прописать event.preventDefault() и в зависимости от location уже выполнять определенные действия.
С другой стороны, вам ничего не мешает сделать этот функционал на JavaScript.

Wazzabi 28.06.2012 03:44

Цитата:

Сообщение от alatar (Сообщение 1086307)
дать вашим ссылкам осмысленный href

дал ссылке href="playvideo.html"
и добавил слушателя
Код AS1/AS2:

html = new HTMLLoader();
...........
 
html.addEventListener(LoacationChangeEvent.LOCATION_CHANGING, myFunc);

дальше обработчик
Код AS3:

private fucntion myFunc(e:LocationChengeEvent):void
{
  trace("событие поймано");
}

Ничего не выводится

Добавлено через 14 часов 31 минуту
дайте ссылку на пример, пожалуйста.
2ой день ничего не получается... Гуглил, гугл не сказал ничего =(

alatar 28.06.2012 23:36

Весь код приведите. И лучше скопируйте из редактора, а не переписывайте. Должно работать, ошибка в другом месте.

Wazzabi 29.06.2012 06:12

Код AS1/AS2:

package  
{
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.display.MovieClip;
        import flash.display.Stage;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.net.URLRequest;
        import flash.html.HTMLLoader;
        import flash.events.LocationChangeEvent;
 
        import com.greensock.*;
 
        /**
        * ...
        * @author wazzabi
        */

        public class MainWin extends MovieClip
        {
                public static var lang:int;
 
 
                private var header:Sprite;
                private var menu:Sprite;
                private var contentBG :Sprite;
                private var homeBtn:Sprite;
                private var html:HTMLLoader;
                private var themeId:int;
 
                private var flvLoader:Loader;
                private var flv:MovieClip;
 
 
 
                public function MainWin(stage:Stage)
                {
                        stage.showDefaultContextMenu = false;
                        stage.scaleMode = StageScaleMode.SHOW_ALL;
                        stage.tabChildren = false;
                        stage.stageFocusRect = false;
                        stage.focus = stage;
                        stage.quality = "high";
 
                        // defalt lang
                        lang = 0;
 
                        loadScreen();
 
                }
 
                private function loadScreen():void
                {
                        switch (lang)
                        {
                                case 0 :
                                        header = new HeaderRus();
                                        menu = new MainMenu();
                                        break;
                        }
 
                        // zagolovok
                        header.x = 70;
                        header.y = 39;
                        addChild(header);
 
                        // menu
                        menu.x = 85;
                        menu.y = 150;
                        menu.addEventListener(MouseEvent.CLICK, menuClickHandler, false, 0, true);
                        addChild(menu);
 
                        // home button
                        homeBtn = new HomeBtn();
                        homeBtn.addEventListener(MouseEvent.CLICK, homeBtnClickHandler, false, 0, true);
 
                        loadFLVplayer();
                }
 
                private function loadFLVplayer():void
                {
                        flvLoader = new Loader();
                        flvLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPlayerLoadComplete);
                        flvLoader.load(new URLRequest("MyFVLplayer.swf"));
                }       
 
                private function onPlayerLoadComplete(e:Event):void
                {
                        flvLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onPlayerLoadComplete);
                        trace("flv loaded");
                        flv = flvLoader.content as MovieClip;
                }
 
                private function menuClickHandler(e:Event):void
                {
                        trace(e.target.name);
 
 
                        contentBG = new ContentPanel();
                        contentBG.x = 640;
                        contentBG.y = 580;
                        contentBG.alpha = 0;
                        addChild(contentBG);
 
                        homeBtn.alpha = 0;
                        homeBtn.x = 1113;
                        homeBtn.y = 149;
                        addChild(homeBtn);
 
                        var timeline:TimelineLite = new TimelineLite();
                        timeline.append( new TweenLite(menu, 0.6, {x:-900}) );
                        timeline.append( new TweenLite(contentBG, 0.3, { alpha:1 } ) );
                        timeline.append( new TweenLite(homeBtn, 0.3, { alpha:1 } ) );
 
                        // пока показывает одну тему
                        showThemes(1);
                }
 
                private function showThemes(theme:int):void
                {
 
                        html = new HTMLLoader();
 
                        html.width = 950;
                        html.height = 585;
                        html.x = 250;
                        html.y = 175;
 
 
                        var urlReq:URLRequest = new URLRequest(Config.pagesPath + "hist" + theme + ".html");
 
                        html.load(urlReq);
                        //html.addEventListener(LocationChangeEvent.LOCATION_CHANGING, myFunc);
                        html.addEventListener(Event.COMPLETE, htmlLoadComplete);
 
                        contentBG.addChild(html);
                }
 
                private function htmlLoadComplete(e:Event):void
                {
                        html.addEventListener(LocationChangeEvent.LOCATION_CHANGING, myFunc);
                }
 
                private function myFunc(e:LocationChangeEvent):void
                {
                        trace("клик по ссылке");
                }
 
                function removeFLVPlayer(e:Event):void
                {
                        flv.removeEventListener("PLAYER_CLOSED", removeFLVPlayer);
                        removeChild(flv);
 
                }
 
 
                private function homeBtnClickHandler(e:MouseEvent):void
                {
 
                        var timeline:TimelineLite = new TimelineLite();
                        timeline.append( new TweenLite(contentBG, 0.3, { alpha:0 } ) ) ;
                        timeline.append( new TweenLite(homeBtn, 0.1, { alpha:0 } ) );
                        timeline.append( new TweenLite(menu, 0.4, {x:85}) );
 
                        removeChild(contentBG);
 
                }
 
        }
 
}

Добавлено через 13 часов 50 минут
После долгих и мучительных поисков получилось сделать только так:
Код AS3:

html.addEventListener(Event.LOCATION_CHANGE, myFunc);

Где myFunc
Код AS3:

private function myFunc(e:Event):void
{
    trace(e.target.location);
}

выдает следующую строчку "app:/pages/rus/playvideo.html"
Ивента Event.LOCATION_CHANGING не нашел. И метод preventDefault() тоже и если страницы playvideo.html не существует на лок.диске переход не осуществится, а если имеется - переходит...

Теперь вопрос следующий:
Если через ссылку передать переменные, например:
PHP код:

 href="playvideo.html?video_id=1" 

как вытащить "video_id=1" или его значение "1"? Копать в сторону рег.выражении?

alatar 01.07.2012 11:19

Цитата:

После долгих и мучительных поисков получилось сделать только так:
Вы используете версию AIR до 2.7, в этом случае отправляется событие типа Event, в 2.7 и выше LocationChangeEvent.
Цитата:

как вытащить "video_id=1" или его значение "1"? Копать в сторону рег.выражении?
Вы можете просто указать в href "video_1".


Часовой пояс GMT +4, время: 15:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.