I needed to send and receive messages from javascript to a flash movie built in haXe.
Googling showed references to Haxe's remoting class, but there's a much simpler (and possibly less robust!) way using flash's ExternalInterface class.
First your going to need a reference to your flash movie. If you've embedded it using flashembed (and you are using flashembed, aren't you?), you can do it like this:
var movieObj; $(document).ready(function() { var api = flashembed('background', {src: 'vid.swf', wmode: 'opaque', allowScriptAccess: 'always'}); movieObj = document.getElementById(api.getApi().id); });
movieObj now contains a reference to the flash movie's DOM element.
We can now send messages to the flash movie like this:
movieObj.pause();
OK, so far so good.
Now we need to tell the flash movie what to do with these messages.
In the flash actionscript, register the message with ExternalInterface, something like this:
import flash.external.ExternalInterface; class Foo { public function new(){ ... ExternalInterface.addCallback( 'pause', doPause ); } function doPause() { trace('got pause()'); } public static function main() { new Foo(); } }
Et voilá.
Now to get it working the other way around, you can call any javascript function (your own, or a built-in function) like this:
ExternalInterface.call('jsFunctionName', 'argument'); // eg: // ExternalInterface.call('alert', 'Foo!');comments powered by Disqus