これは元の投稿の編集であり、問題をよりよく理解しています。 今ソースコードで!
IEでは、body(または別のhtml divにフォーカスがある)の場合、キーを押しながらフラッシュをクリックしてから放します...キーアップイベントが発生することはありません。javascriptやフラッシュでは起動されません。このキーアップイベントはどこにありますか?
これは、代わりに取得するイベント発生の順序です。
- javascriptKeyEvent:bodyDn ** currentFocusedElement:body
- javascriptKeyEvent:docDn ** currentFocusedElement:body
- actionScriptEvent:アクティブ化** currentFocusedElement:[オブジェクト]
- actionScriptEvent:mouseDown ** currentFocusedElement:[オブジェクト]
- actionScriptEvent:mouseUp ** currentFocusedElement:[オブジェクト]
後続のキーダウンおよびキーアップイベントはフラッシュによってキャプチャされますが、その最初のキーアップはどこでも発生しません。そして、私はそのキーアップが必要です!
動作しないもの:
- キーがリスナーなしでアップしているかどうかを確認します。 キーが押されているかどうかを確認しますか?
- wmode不透明または直接。ただし、不透明な場合、再現するのははるかに困難です。
- フォーカスをできるだけ早くjavascriptに戻し、アップイベントをキャッチします。(javascriptのblurリスナーを使用してこれを試し、as3がアクティブ化されたときにフォーカスを設定しました。)
- jqueryもプロトタイプも欠落しているキーアップをキャプチャしません
- 静的および動的swfobjectパブリッシングの両方
html/javascriptは次のとおりです。
<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="swfobject.js"></script>
<script>
function ic( evt )
{ Event.observe( $("f1"), 'keyup', onKeyHandler.bindAsEventListener( this, "f1Up" ) );
Event.observe( $("f2"), 'keyup', onKeyHandler.bindAsEventListener( this, "f2Up" ) );
Event.observe( document, 'keyup', onKeyHandler.bindAsEventListener( this, "docUp" ) );
Event.observe( $("body"), 'keyup', onKeyHandler.bindAsEventListener( this, "bodyUp" ) );
Event.observe( window, 'keyup', onKeyHandler.bindAsEventListener( this, "windowUp" ) );
Event.observe( $("f1"), 'keydown', onKeyHandler.bindAsEventListener( this, "f1Dn" ) );
Event.observe( $("f2"), 'keydown', onKeyHandler.bindAsEventListener( this, "f2Dn" ) );
Event.observe( document, 'keydown', onKeyHandler.bindAsEventListener( this, "docDn" ) );
Event.observe( $("body"), 'keydown', onKeyHandler.bindAsEventListener( this, "bodyDn" ) );
Event.observe( window, 'keydown', onKeyHandler.bindAsEventListener( this, "windowDn" ) );
Event.observe( "clr", "mousedown", clearHandler.bindAsEventListener( this ) );
swfobject.embedSWF( "tmp.swf",
"f2",
"100%",
"20px",
"9.0.0.0", null, {}, {}, {} );
}
function clearHandler( evt )
{ clear( );
}
function clear( )
{ $("log").innerHTML = "";
}
function onKeyHandler( evt, dn )
{ logIt( "javascriptKeyEvent:"+dn );
}
function AS2JS( wha )
{ logIt( "actionScriptEvent::" + wha );
}
function logIt( k )
{
var id = document.activeElement;
if (id.identify)
{ id = id.identify();
}
$("log").innerHTML = k + " ** focuedElement: " + id + "<br>" + $("log").innerHTML;
}
Event.observe( window, 'load', ic.bindAsEventListener(this) );
</script>
</head>
<body id="body">
<div id="f1"><div id="f2" style="width:100%;height:20px; position:absolute; bottom:0px;"></div></div>
<div id="clr" style="color:blue;">clear</div>
<div id="log" style="overflow:auto;height:200px;width:500px;"></div>
</body>
</html>
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);
}
}
}
}