это - редактирование исходного сообщения теперь, когда я лучше понимаю проблему. теперь с исходным кодом!
В IE, если тело (или другое отделение HTML фокусируется), то Вы нажатие клавиши и нажимаете на флэш-память одновременно, затем выпускают... keyup событие, никогда не запускается. Это не запущено в JavaScript или во флэш-память. Где это keyup событие?
Это - порядок события, увольняющего Вас, добираются вместо этого:
Последующий keydown и keyup события получены флэш-памятью, но что начальная буква keyUp никогда не запускается.. где угодно. И мне нужно это keyup!
Что не работает:
Вот html/javascript:
clear
Вот код as3:
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.external.ExternalInterface;
public class tmpa extends Sprite
{
public function tmpa( ):void
{
extInt("flashInit");
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDnCb, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpCb, false, 0, true );
stage.addEventListener( MouseEvent.MOUSE_DOWN, mDownCb, false, 0, true );
stage.addEventListener( MouseEvent.MOUSE_UP, mUpCb, false, 0, true );
addEventListener( Event.ACTIVATE, activateCb, false, 0, true );
addEventListener( Event.DEACTIVATE, dectivateCb, false, 0, true );
}
private function activateCb( evt:Event ):void
{ extInt("activate");
}
private function dectivateCb( evt:Event ):void
{ extInt("deactivate");
}
private function mDownCb( evt:MouseEvent ):void
{ extInt("mouseDown");
}
private function mUpCb( evt:MouseEvent ):void
{ extInt("mouseUp");
}
private function keyDnCb( evt:KeyboardEvent ):void
{ extInt( "keyDn" );
}
private function keyUpCb( evt:KeyboardEvent ):void
{ extInt( "keyUp" );
}
private function extInt( wha:String ):void
{ try
{ ExternalInterface.call( "AS2JS", wha );
}
catch (ex:Error)
{ trace('ex: ' + ex);
}
}
}
}
Вот, что я ожидаю, происходит: вы нажимаете клавишу, когда фокус находится в html. Вы щелкаете по объекту вспышки, и фокус переходит на него. Когда ключ поднят, поскольку html больше не имеет фокуса, он не знает о поднятом ключе. Вы можете легко проверить это, сделав то же самое, только вместо того, чтобы щелкнуть объект flash, щелкнуть другое окно и попробовать то же самое, потому что это фактически то, что происходит.
Что касается события нажатия клавиши, которое не происходит во флэш-памяти, это, вероятно, потому, что оно не генерирует события нажатия клавиши без нажатия клавиши, чего никогда не было, потому что фокус все еще находился в html.
Я могу придумать два возможных решения этой проблемы. Во-первых, убедитесь, что объект вспышки начинается с фокусировки . Второй - наложить пустой div поверх flash-объекта, чтобы он никогда не получил фокус.
Поместите ваш SWF Embed перед любым другим JavaScript.
swfobject.embedSWF( "tmp.swf",
"f2",
"100%",
"20px",
"9.0.0.0", null, {}, {}, {} );
Я бы попробовал сделать это вне всех функций или в готовой к документу функции jQuery, потому что Flash получает z-index бесконечности и должен принимать нажатия клавиш раньше всего остального, если только он еще не присутствует, когда происходит первое нажатие клавиши.
Мое предположение заключается в том, что первый удар по клавише происходит до того, как что-либо успевает его принять. Попробуйте использовать триггер события keyup с jQuery в функции on document ready.