Fullscreen in AS3 Tutorial | Plus Firefox Flash bug when enter fullscreen keyboard events fired

Google Buzz

To view the full fullscreen tutorial go here: How to use fullscreen in AS3 | Stage Display State Tutorial

fullscreen_keyboard_bug_thumbnail
Sucks when you seem to have a bug in your code somewhere so you dissect your code over and over and are convinced that according to your code, everything should be fine, so you come back later thinking fresher eyes will see it, and still can’t find the cause, and then resort to debugging with various trace statements…

I’ve been developing a custom flash player in as3. Fullscreen and all those bells and whistles… I could test locally and eveything was beautiful… but then upload and test in the browser and when I would go into fullscreen mode, the video would pause. Pretty annoying bug! So I’d go through my code and examine anywhere a call to pause the video (there are only two): pressing the play/pause button and pressing the spacebar (keyboard shortcut). I couldn’t find any correalation. I was thinking adobe must be doing some crazy security things when going into fullscreen… but no, no other video player I’ve seen does this!
After commenting out my keyboard events, the bug is fixed! But I still can’t use the spacebar to pause/play. I love this functionality for usability. Isn’t that pretty standard for video? space to pause, it’s like second nature to me.

Does entering fullscreen really trigger a keyboard event equivalent to pressing my spacebar!? Sure enough. how much sense does that make, but it gets better! I had a friend test this swf and it worked fine for him. No pause on fullscreen! Wha!? Using good ole IE7… So yes, it’s a browser specific actionscript bug, firefox even! That was one of the things I liked about flash initially, not too much to mess with as far as cross browser issues once you get the swf embedded in the html, or so I thought.

So after playing with booleans to try to control when the keyboard events will be working.

Has anyone experienced this or another issue that just left you baffled, even after you figured out the bug?!

Well, I’ve done the right thing, I’ve posted about it to hopefully help anyone else having this issue. I created a test case file to rule out anything else in my code and make sure I’m not crazy.

Get Adobe Flash player

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

fsb.addEventListener(MouseEvent.CLICK, fullscreenToggle);
ssb.addEventListener(MouseEvent.CLICK, fullscreenToggle);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullscreenChange);
fsb.buttonMode = true;
ssb.buttonMode = true;
onFullscreenChange();

function fullscreenToggle(e:MouseEvent = null):void {
    //normal mode, enter fullscreen mode
    if (stage.displayState == StageDisplayState.NORMAL){
        //set stage display state
        stage.displayState = StageDisplayState.FULL_SCREEN;
    }
    //fullscreen mode, enter normal mode
    else if (stage.displayState == StageDisplayState.FULL_SCREEN){
        //set stage display state
        stage.displayState = StageDisplayState.NORMAL;
    }
    onFullscreenChange();
}
function onFullscreenChange(e:FullScreenEvent = null):void {
    if (stage.displayState == StageDisplayState.FULL_SCREEN) {
        tracer("full screen");
        fsb.visible = false;
        ssb.visible = true;
    }
    else {
        tracer("small screen");
        fsb.visible = true;
        ssb.visible = false;
    }
    tracer("toggle to "+stage.displayState);
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownListener);

function keyDownListener(e:KeyboardEvent) {
    tracer("keyboard: keyCode: "+ e.keyCode.toString());
}
var tracerwindow:TextField;
function tracer( ...args){
        if (tracerwindow == null){
            tracerwindow = new TextField();
            tracerwindow.width = stage.stageWidth/2;
            tracerwindow.height = stage.stageHeight;
            tracerwindow.multiline = true;
            addChild(tracerwindow);
        }
       
        for (var i:uint = 0; i < args.length; i++) {
            tracerwindow.appendText(args[i].toString() + " ");
        }
        tracerwindow.appendText("\n");
        trace(args);
}

other places that I’ve found this mentioned that helped me understand what was going on:

http://dreamweaverforum.info/actionscript-3/123202-keyboard-event-full-screen.html

http://bugs.adobe.com/jira/browse/FP-814

  • del.icio.us
  • Digg
  • email
  • Facebook
  • FriendFeed
  • Google Bookmarks
  • Hexosearch
  • LinkedIn
  • Mixx
  • Print
  • PDF
  • StumbleUpon
  • Technorati
  • Twitter
  • RSS
This entry was posted in tutorial and tagged , , , , , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

9 Comments

  1. Posted 2 April 2009 at 8:51 pm | Permalink

    I’ve seen this bug and worked around it by removing the spacebar key eventlistener before going fullscreen and then created a timer to add the eventlistener back in half a second. A horrible horrible hack, but it works…

  2. Posted 13 April 2009 at 10:47 pm | Permalink

    hey i’m having a weird problem with firefox.. if you try my website, and click around a bit, you’ll see that for some reason the buttons stop working… it happens very rarely in IE8, but ALOT in firefox 3.. any ideas?..

  3. Posted 24 April 2009 at 9:31 am | Permalink

    @Brian – Thanks! I did think if that, but was hoping to find a non-hack way to solve it. But as you say, it works… and sometimes that’s what we have to do, just make it work.

    @Scott – I clicked around in ff3, but the buttons seemed to work fine for me. Isn’t it horrible dealing with browser specific bugs in flash… Good luck!

  4. Posted 2 July 2009 at 10:38 am | Permalink

    Hi Scott, I'm also experiencing the same quite irritating problem so I was wondering whether you've found out how to prevent it from happening..

  5. Saurabh
    Posted 19 August 2009 at 7:29 am | Permalink

    Yup. Been smashing my head on the desk (keyboard is expensive) for the last few days trying to figure out why my “spaceBar” listeners were running off everytime it went into fullscreen. But just as all AS coders know – if it doesn’t make sense, google it. Its probably a known flash bug. And looks like it is. I haven’t begun thinking of a workaround yet, but i think brian’s should work for me too.

    Thanks Evan!

  6. Posted 25 August 2009 at 9:39 am | Permalink
  7. Posted 25 August 2009 at 4:07 pm | Permalink

    I believe that keyboard entry is limited for security reasons. The reason keyboard input was blocked was to help prevent phishing attacks using Flash, where full-screen is used to simulate a log-in screen, someone else’s website, etc. So there are limits to what you can do in full screen with a keyboard so that the end user is protected from phishers.

  8. Posted 26 August 2009 at 3:24 pm | Permalink

    @Joshua – Right, keyboard entry is limited in fullscreen, but that’s not the issue with this but. This bug is that in firefox going fullscreen actually fires an event equal to that of the space bar being pressed.

  9. Posted 14 January 2010 at 6:05 am | Permalink

    Thanks, this is very helpful.

One Trackback

  1. [...] Fullscreen in AS3 Tutorial | Plus Firefox Flash bug when enter fullscreen keyboard events fired | ci… [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>