Possible Duplicate:
How do I make flex only consume mouse scroll and keyboard events when it's useful, and otherwise pass it on to the browser?
I’m making a web application with hotkey support, but the application utilizes flash quite heavily in the form of justin.tv stream embeds. I’m worried that once a user presses play or stop or focuses the flash field in any other way it will eat all subsequent key events before they reach Javascript. I’m worried because I know that the YouTube flash field does this; once it’s focused I can’t close the browser window with CTRL+W or CTRL+Tab into another tab.
Is that unique to the YouTube flash player? If not, is there anything I can do on the Javascript side to make sure focus remains on my application, allowing my hotkeys to function?
Any additional information on the topic of Javascript key events and browser plugins would be appreciated.
PS: I am aware I can deny access to the Flash field altogether by means of an invisible div overlay, but I would prefer any user to be allowed to play/stop and control the volume of the embedded stream.
Unless Flash is activated through user interaction, it doesn’t receive key events. However, once it happens, it doesn’t retransmit key events to DOM. Unfortunately, even though you could trap all keys in JavaScript, you wouldn’t be able in general to notify Flash when you choose too. Flash won’t also receive focus through tabbing, but once it has focus, will not transfer it back to the page. There are only certain key combinations that you can’t listen to in Flash (because they are handled by the browser), such as Ctrl+O for example.
But if you have control over the code executed in Flash (at least, you have to be able to load foreign SWF into your own SWF), then you could pass keystrokes to it and from it. I’m not sure about the tabstops. I think it would depend on the browser and whether it allows JavaScript to call
focus().Here’s a demo, it is for the right mouse click only, but it would be similar for other key/mouse events.