PDA

Просмотр полной версии : Событие onkeydown для клавиши F3 не ловится во Flash 8


Antalas
07.03.2007, 16:24
Добрый вечер, уважаемые!

Разрабатываем туториалы на флэш, в которых симулируем работу в той или иной софтине.
Туториалы эти выполняются в браузере; целевой браузер - IE 6. Разработка ведётся в Flash 8, плеер 8.0.22.
Нужно во что бы то ни стало просимулировать нажатие функциональной клавиши F3 в одном из туториалов.

Написал максимально упрощённую флэшовину с минимумом кода.

В debugVar (см. код) можно увидеть коды нажимаемых алфавитно-цифровых клавиш, пробела, некоторых функциональных (напр. F7).
Однако, нажатие F3 приводит к появлению окна поиска браузера и код клавиши во флэше не отображается!

Кто сталкивался и знает как решить - отзовитесь! Чую здесь нужно смешивать DHTML и Flash...

Вот какой код в первом фрейме клипа:

myObj={};
myObj.onKeyDown = function() {
debugVar=Key.getCode();
if (Key.isDown(114)) {
/*
полезные действия по симуляции
*/
delete this.onKeyDown;
Key.removeListener(this);
}
};
Key.addListener(myObj);


Вот что в первом фрейме выдаёт 'List Objects...' проверочного плеера:

Level #0: Frame=1
Edit Text: Target="_level0.instance1" Variable=_level0.debugVar Visible=true Text = "


Вот как выглядит HTML-обрамление:

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<TITLE>Test</TITLE>
<HEAD>
</HEAD>
<BODY bgcolor="#FFFFFF" leftMargin=0 topMargin=0 >
<center>
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
ID="index" WIDTH="796" HEIGHT="537" ALIGN="top" VIEWASTEXT>
<PARAM NAME="movie" VALUE="swf/slide_000.swf">
<PARAM NAME="loop" VALUE="false">
<PARAM NAME="menu" VALUE="false">
<PARAM NAME="quality" VALUE="high">
<PARAM NAME="scale" VALUE="noscale">
<PARAM NAME="bgcolor" VALUE="#FFFFFF">
<EMBED src="swf/slide_000.swf" loop="false" menu="false" quality="high" scale="noscale" wmode="transparent"
bgcolor="#FFFFFF" WIDTH="796" HEIGHT="537" swLiveConnect="true" ID="index" NAME="index"
ALIGN="top" TYPE="application/x-shockwave-flash" PLUGINSPAGE="https://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
</center>
</BODY>
</HTML>


Что удалось найти по вопросу:
http://www.flashsupport.com/forum/topic.asp?TOPIC_ID=1701
http://www.actionscript.org/forums/archive/index.php3/t-3128.html
http://livedocs.adobe.com/flash/mx2004/main_7_2/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Flash_MX_2004&file=00001352.html
http://www.faqts.com/knowledge_base/view.phtml/aid/9106

iNils
07.03.2007, 16:58
Вы бы еще F5 пытались перехватить, вот было бы здорово.

MyXus
07.03.2007, 17:20
системные клавишы не слушаются в IDE.
А в бравзере всё ок

Antalas
09.03.2007, 16:20
Вот решение. Проверено в Flash Player 8.0.22, IE6 SP2, Win XP, AMD Sempron 2400+.

Написано с применением flash.external.ExternalInterface.

iNils
09.03.2007, 18:08
Вот решение. Проверено в Flash Player 8.0.22, IE6 SP2, Win XP, AMD Sempron 2400+.

Написано с применением flash.external.ExternalInterface.Не работает. IE как и открывал вкладку поиска, так и открывает. Maxthon как и переходил на следущую вкладку, так и переходит.

etc
09.03.2007, 18:11
Не работает.
Error: event is not defined
Source File: file:///c:/Shit/Download/FunctionKeyTrap_v1_0/js/FunctionKeyTrap.js
Line: 14


В IE отлавливает через раз.

Antalas
10.03.2007, 18:09
А IE у вас какой? А флеш? Напишите конфигурацию софта и CPU плиз.
Вот на чём работает железно: Flash 8.0.22 + Internet Explorer 6 SP2

etc
10.03.2007, 18:12
Первый раз тестил в Firefox 2.0.0.2 (в нем не работает)
Потом в IE6 SP2 (через раз работает).
В обоих Flash Player 9.
CPU зачем?

iNils
10.03.2007, 18:16
Maxthon 1.5.7 build 82
Flash Player 9
СPU: старый бабушкин пылесос

Antalas
12.03.2007, 13:56
Код написан под IE6
CPU - так, к слову пришёлся
Как "через раз"? Можете описать?

etc
12.03.2007, 14:15
Работает, только если пару раз кликнешь по области флеша и то, есть большой шанс, что на второй раз уже не сработает. Т.е. опять пару кликов по флешу и тогда отловит.

з.Ы, Maxthon и есть IE.

Antalas
12.03.2007, 18:55
Как оказалось, чтобы flash.external.ExternalInterface уверенно работал на локальной машине в localWithFilesystem sandbox необходимо установить "Always Allow" здесь:http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html.

Если же вы выполняете код фреймворка FunctionKeyTrap с удалённого веб-сервера, то будет запускаться без проблем. Можно даже занизить привилегии кода allowScriptAccess с "always" на "sameDomain".

Antalas
12.03.2007, 19:03
Писался только под IE6 SP2
Тестился только в нём. Если у кого есть желание дописать под другие платформы - милости просим!:victory:

etc
12.03.2007, 19:21
Фича тут не при делах, потому как давно настроено.
Все дело в фокусе, а он слетает с флеша регулярно. Не будет оно нормально работать и все тут.

MyXus
12.03.2007, 20:04
а javascript сетфокус не работает на объект флеша?

etc
12.03.2007, 20:05
Работает. Предлагаешь постоянно на него передавать? Да я бы за такое поубивал бы, меня F5 лишают!

MyXus
12.03.2007, 20:05
почему. f5 на месте. f3 лишают ;-))

etc
12.03.2007, 20:06
F5 тоже перестает работать, как ни странно.

iNils
12.03.2007, 21:23
почему. f5 на месте. f3 лишают ;-))Функциональные клавиши лучше вообще не трогать. У меня F2/F3 переход на вкладку вперед/назад, F5 сами знаете. Могу еще что-то навесить. По сути, вы влезаете в личное простраство пользователя, а за такое, как мимиму уходят с сайта, как максимум - руки отрывают. Также как и за принудительное добавление в фаворит лист или смена домашний страницы браузера (а от мании величия надо лечить)

MyXus
12.03.2007, 22:04
Ну там обучалово какое то было номинально, в сабже топика -)

Antalas
12.03.2007, 23:52
там метод есть, addKey; указываем там коды блокируемых клавиш. Так что если надо чтобы F5 работала, а F3 нет, то делаем один лишь вызов addKey(114).

Насчёт фокусов: да, в основе всего фреймворка лежит снятие фокуса с объекта флэш и переустановка его на window.document чтобы браузер ловил события сам.

Насчёт ExternalInterface и безопасности по-умолчанию: недоволен ими. Дефолтовая безопасность запрещает использование ExternalInterface на локальной машине. Чего делать? Возвращаться к старым добрым GetURL/FSCommand?:wacko: