PDA

Просмотр полной версии : Как запретить/перехватить событие keyDown которое передается из Flex в Javascript.


makanmel
04.01.2008, 23:41
На HTML странице есть Flex-приложение. Как при нажатии PgUp/PgDn в этом приложении запретить дальнейшую передачу соответствующего события в браузер, или хотя бы как-то его перехватить в Javascript?
Это нужно для того, что бы при работе с Flex-приложением, в котором на эти клавиши назначены определенные действия, браузер не прокручивал страницу.

Пробовал во Flex делать так (проверку на код кнопки не привожу):

protected function onKeyDown(event:KeyboardEvent) : void
{
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
}


А в Javascript делал так:

window["flexObject"].onkeydown = keydown;
function keydown(event)
{
if (!event) event = window.event;
if (event.preventDefault) event.preventDefault();
if(event.stopPropagation) event.stopPropagation();
event.cancelBubble=true;
return false;
}


Не работает. Причем если обработчик keydown повесить на HTML документ:

window.onkeydown = document.onkeydown = keydown;


И нажимать кнопки, когда фокус не на Flex-приложении, то все работает нормально (страница не прокручивается).

Еще пробовал повесить обработчик в Javascript на событие scroll:

window.onscroll = document.onscroll = scroll;
function scroll(event)
{
document.body.scrollTop = 0;
}


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

Что делать - не знаю. Догадываюсь, что можно как-то повесить обработчик события keyDown в Javascript на flash-объект, но в интернете не могу найти. Кто сталкивался с таким - подскажите.

Pieson
16.05.2008, 08:52
Понимаю, что решение несколько запоздало, но может, кому пригодится:

Данная проблема связана с параметром wmode. Если установлен wmode=transparent или opaque, то IE, рассматривает флэшку как часть своего окошка, т.е. перехватывает все события от неё.

Решение: wmode=window