Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   HTML-компонент и получение элементов страницы (http://www.flasher.ru/forum/showthread.php?t=187905)

DaFive 26.11.2012 11:37

HTML-компонент и получение элементов страницы
 
Товарищи, каким образом можно получить html-элемент во флексовском компоненте HTML, на который я навел курсор или по которому кликнул. Причем если я ткнул по ссылке в загруженной странице - запретить переход по ней и так же получить, скажем, её id или class?

Понятно, что можно обратиться к элементу, если я знаю его класс. Но если он мне неизвестен (адрес страницы каждый раз разный) - тут уже хуже. Ткните куда гуглить или где почитать, пожалуйста.

alatar 26.11.2012 12:34

Запретить переход можно перехватив событие locationChanging у его htmlLoader.

DaFive 26.11.2012 12:36

alatar, спасибо за наводку.
Вопрос с получением элементов пока открыт.

alatar 26.11.2012 12:44

Не экспериментировал, но можно как в display list подписаться у body на capture фазу мышиных событий, отлавливать все объекты и проверять их id и class.

DaFive 26.11.2012 14:00

Вах, что получается.
После загрузки контента - получаем body страницы. Пока для теста присвоил всему чему можно mousemove, даже трейсит.
Код AS3:

<mx:HTML id="myhtml" x="0" y="0" width="100%" height="100%" location="http://localhost/test.html" complete="makeListeners();"/>
 
private function makeListeners():void {
    trace("BODY: "+myhtml.domWindow.document.body);
    var body:* = myhtml.domWindow.document.body;
 
    for (var prop:String in body) {
          try {
            var testLink:Object = body[prop];
                  if(testLink.innerHTML != '') {
                    testLink.addEventListener("mousemove", onMouseMove)       
                  }
        } catch(e:Error) {}
    }
}
 
private function onMouseMove(evt:MouseEvent):void {
      trace(evt.target.innerHTML);
}

Но попахивает кривым костылём. Буду дальше ковырять.

alatar 26.11.2012 14:14

Попробуй так:
Код AS3:

<mx:HTML id="myhtml" x="0" y="0" width="100%" height="100%" location="http://localhost/test.html" htmlDOMInitialize="makeListeners();"/>
 
private function makeListeners():void {
    var body:Object = myhtml.domWindow.document.body;
 
    body.addEventListener("mousemove", onMouseMove, true);
}
 
private function onMouseMove(evt:MouseEvent):void {
      trace(evt.target.innerHTML);
}


DaFive 26.11.2012 14:21

Не, не стреляет, пробовал. Говорит:
Код AS3:

Type Coercion failed: cannot convert __HTMLScriptObject@2fa6d91 to flash.events.MouseEvent.

То есть не всему можно MouseMove назначить, походу. Если оставить обработчик события без явного указания MouseEvent типу события - результат одинаков с моим.

То бишь трейсит все, вплоть до функций, объявленных в тегах <script>.

Цитата:

<script>
function test() {
alert('test');
}
</script>
<a href="#" class="hr">test</a>
А когда наводишь непосредственно на ссылку - выводит test, то есть innerHTML.
По сути код рабочий, осталось разграничить объекты, которым этот mousemove надо цеплять.

Добавлено через 18 минут
Ха, подбираемся к истине. Нашел решение, которое, в принципе, меня устраивает на текущий момент времени.
Опять же подписываем html на complete, далее берем код alatar. И в обработчике указываем что трейсить конкретно.

Код AS3:

private function makeListeners():void {
    var body:Object = myhtml.domWindow.document.body;
    body.addEventListener("mouseover", onMouseMove, true);
}
 
private function onMouseMove(evt:*):void {
  if(evt.target.tagName != 'BODY') {
        trace(evt.target.outerHTML);       
  }                               
}

На выходе получаем что-то вроде:
Цитата:

<a href="#" class="hr">test</a>
<div>test123</div>
alatar, спасибо за участие.

alatar 26.11.2012 16:21

Цитата:

То есть не всему можно MouseMove назначить, походу.
Скопипастил и не посмотрел. Классы событий не совпадают (что естественно), вместо Event следует использовать Object. К чему ты собственно уже и пришел :)


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

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