FlashPlayer のバグ?仕様?
ActionScript を使った開発を行う時には、デバッグしやすいスタンドアロンのプレイヤーを利用しています。ダウンロードは下のアドレスから。スタックトレースはじめ、何だかんだ言って便利です。
http://www.adobe.com/support/flashplayer/downloads.html
さて、今回は普段便利なプレイヤーの仕様のせいで困ったのでメモを。個人的には時間を取られたのでバグだと思っています。
Ctrl + c などのショートカットをアプリケーションに実装しようと思ったのですが、スタンドアロンのプレイヤーではキーボードの値が正しく取得されないようです。
サンプル
具体的には、以下のようなケース。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()"> <mx:Script> <![CDATA[ import flash.events.*; private function init():void { addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); } override protected function keyDownHandler(e:KeyboardEvent):void { l.text = "code:" + e.keyCode + " ctrl:" + e.ctrlKey; } ]]> </mx:Script> <mx:Label id="l" /> <mx:TextInput /> </mx:Application>
ブラウザでこれを実行して TextInput 上でキー入力を行うと Ctrl + c で Ctrl キー(Mac では Command キーも)が押されている事と、『c』のキーが押されている事が確認できます。
一方スタンドアロンのプレイヤーでは Ctrl + c を押しても keyCode プロパティで Ctrl キーの値が返されてしまいます。
さらに調べたところ一部のキーでは正しい値が入り、定義済みのショートカットが存在するキーではその動作が優先されてしまうようでした(例えば Ctrl + q ならプレイヤーが終了します)。
大体の場合ブラウザで実行できれば問題ないのですが、同じようなケースではまったとしても、それはコードのせいではないかもしれませんよ、ということで。