Reputation: 478
I tried to call a flash callback method from JavaScript. But it seems not working. The flash action script example code is like below [Simplified]:
import flash.events.ActivityEvent;
import flash.events.StatusEvent;
import flash.external.ExternalInterface;
var test_var = ExternalInterface.addCallback("js_method_to_call", flash_method);
function flash_method()
{
return "test";
}
The javascript example code is written below [Simplified]:
function callFlashMethod(){
var flashFile = eval("window.document.test");
flashFile.js_method_to_call;
}
function loadTest(){
swfobject.embedSWF("test.swf", "test", "1", "1", "10.0.0", false);
}
$(document).ready(function(){
loadTest();
callFlashMethod();
});
It is always display the error in fire bug console "flashFile.js_method_to_call is not a function".
Upvotes: 5
Views: 25206
Reputation: 6715
This page describe the solution very well, just try to make that sample work. So you can sort out the problem, and Vladimir Tsvetkov's answer is complete.
Upvotes: 1
Reputation: 3013
Here's something that should work really good:
Use SWFObject.js for embedding the Flash content:
// Embedding through SWFObject rocks in comparison with Adobe shits:
var flashvars = {};
var params = {};
params.menu = "false";
params.salign = "t";
params.scale = "noscale";
params.wmode = "transparent";
params.allowScriptAccess = "always";
var attributes = {};
attributes.id = "${swf}";
swfobject.embedSWF("${swf}.swf", "flashDiv", "${width}", "${height}", "9.0.0", "", flashvars, params, attributes);
Use this for the HTML:
<body>
<div id="flashDiv"></div>
</body>
To call your Flash method use this pattern:
// Functions needed for calling Flex ExternalInterface
function thisMovie(movieName)
{
if (navigator.appName.indexOf("Microsoft") != -1)
{
return window[movieName];
}
else
{
return document[movieName];
}
}
Call the Flash method:
function callFlashMethod()
{
thisMovie("${swf}").js_method_to_call();
}
Upvotes: 14
Reputation: 46228
There is an interesting and quite detailed tutorial here http://bytes.com/topic/flash/answers/694359-how-do-i-access-flash-function-using-javascript#post2759970
Upvotes: 1
Reputation: 1373
You get a reference to your embedded SWF object and use it to make a call to your as3 method.
//AS3 Code
ExternalInterface.addCallback("helloFromJS",helloFromJS);
private function helloFromJS():void
{
trace("JS is saying hello");
}
//HTML Code
<object width="100%" height="100%" id="Test">
<param name="movie" value="Test.swf"/>
//JS Code
var swfObject = document.getElementById("Test");
swfObject.helloFromJS();
Upvotes: 9
Reputation: 5577
I'm not sure about this line:
var flashFile = eval("window.document.test");
I would use:
var flashFile = document.getElementById("test");
Also, I'm guessing this was just a typo when pasting here, but flashFile.js_method_to_call;
should be flashFile.js_method_to_call();
Upvotes: 0