问题
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".
回答1:
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(); }
回答2:
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();
回答3:
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
回答4:
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6
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.
回答5:
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();
来源:https://stackoverflow.com/questions/7657842/how-to-call-flash-actionscript-callback-method-from-javascript