Click to Flash object via JavaScript


Is it possible to trigger click event on Flash object via JavaScript?

Yes and no. You can use the ExternalInterface to simulate click events in your Flash project, provided they don't care about the event source (i.e. human or not).

However, one of the features in Flash that's particularly obtuse about the click event source is the File Selection dialog. It's not possible to trigger that without a real click from a real user (as far as the browser is concerned); this would actually be a potential security risk if possible. If I remember correctly, this was possible before FP 9 and we exploited this behavior for our file uploader. This started to cause issues once they fixed it, but I'm glad they did so :)

The typical way to overcome this limitation is by creating a transparent Flash object and positioning a layer over it that shows a button image; the click event will eventually hit the Flash object and trigger a user click event.


I never tested this, so it is just thought

Note please note that you should have a certain div which will capture the clicks.

In Actionscript To simulate a click event, it is possible to use.

 element.dispatchEvent(new MouseEvent(MouseEvent.CLICK, true, false));

So why not creating an external function that will dispatch the event once receiving the invoke from JavaScript using externalinterface? Of course this is very rough but it may well work.

Actionscript:

import flash.external.*;

function simulateButtonClick() 
{ 
// Here goes your code
} 
ExternalInterface.addCallback("invokeSimulateButtonClick", simulateButtonClick); 

Javascript:

 ExternalInterface.addCallback("invokeSimulateButtonClick", YOUR_VARIABLES);

It is possible with Flash ExternalInterface, but you need to write some ActionScript in Flash (.fla) first.

Some references -

Using ExternalInterface in Flash

http://www.actionscript.org/resources/articles/638/1/Basics-of-using-the-ExternalInterface/Page1.html

http://www.adobe.com/devnet/flash/articles/external_interface.html


No you can't capture clicks on embedded elements, unless it's behind a div or something.