OSX 10.7 だと Caps Lock 時に shift が 2 回反応してしまう様子。

by mezumona
Windows 環境ではちゃんと動くようですが、Mac OS X 10.7 では PPAPI を除いて Caps Lock 時に shift を押すと、
押した瞬間:keyDown(shiftKey:true) -> keyUp(shiftKey:true!!)
離した瞬間 : keyDown(shiftKey:false!!) -> keyUp(shiftKey:false)
の順番で一気にイベントが送出されるバグがあるようです。
対策としては、shift が押された場合は KeyboardEvent.type と KeyboardEvent.shiftKey を比較してあげると回避できそう。
♥0 | Line 38 | Modified 2013-05-31 01:27:36 | MIT License
play

ActionScript3 source code

/**
 * Copyright mezumona ( http://wonderfl.net/user/mezumona )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/2eBg
 */

package {
    import flash.display.Sprite;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.text.*;
    import flash.ui.Keyboard;

    public class ShiftKeyTester extends Sprite {
        public function ShiftKeyTester()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            var tf:TextField = new TextField();
            tf.width = stage.stageWidth;
            tf.height = stage.stageHeight;
            addChild(tf);
            _tf = tf;

            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
            stage.addEventListener(Event.RESIZE, function (event:Event):void
            {
                tf.width = stage.width;
                tf.height = stage.height;
            });

        }

        private var _tf:TextField;
        private function keyHandler(event:KeyboardEvent):void
        {
            if (event.keyCode == Keyboard.SHIFT) {
                _tf.appendText(event.type + ": shiftKey = " + event.shiftKey);
                if (event.type == KeyboardEvent.KEY_DOWN ? !event.shiftKey : event.shiftKey) {
                    _tf.appendText("!!");
                }
                _tf.appendText("\n");
                _tf.scrollV = _tf.maxScrollV;
            }

        }

    }
}