如何从 javascript 调用 flash actionscript 回调方法?
Posted
技术标签:
【中文标题】如何从 javascript 调用 flash actionscript 回调方法?【英文标题】:How to call flash actionscript callback method from javascript? 【发布时间】:2011-12-01 06:03:22 【问题描述】:我尝试从 javascript 调用 flash 回调方法。 但它似乎不起作用。 flash动作脚本示例代码如下[简化]:
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";
javascript示例代码如下[简体]:
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();
);
fire bug 控制台总是显示错误“flashFile.js_method_to_call is not a function”。
【问题讨论】:
你试过用 window[ 'test' ] 代替 eval 吗?我很确定这就是问题所在。 【参考方案1】:我不确定这条线:
var flashFile = eval("window.document.test");
我会使用:
var flashFile = document.getElementById("test");
另外,我猜这只是粘贴到这里时的一个错字,但flashFile.js_method_to_call;
应该是flashFile.js_method_to_call();
【讨论】:
我已经尝试了以下所有 3 个选项,但似乎不起作用。document.getElementById("test")
、$("#test")
、eval("window.document.test")
【参考方案2】:
这里有一些应该很好用的东西:
使用 SWFObject.js 嵌入 Flash 内容:
// 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);
将其用于 html:
<body>
<div id="flashDiv"></div>
</body>
要调用您的 Flash 方法,请使用以下模式:
// Functions needed for calling Flex ExternalInterface
function thisMovie(movieName)
if (navigator.appName.indexOf("Microsoft") != -1)
return window[movieName];
else
return document[movieName];
调用 Flash 方法:
function callFlashMethod()
thisMovie("$swf").js_method_to_call();
【讨论】:
我在萤火虫控制台thisMovie("test").js_method_to_call is not a function
得到错误
您是否使用我的示例中的 JS 来加载 SWF?确保 attributes.id = "test";
占位符变量 $swf
仅在您使用 Flash Builder 构建并且此代码放置在 index.template.html 中并且您已正确注释应用程序的入口点 Sprite 时才有效。跨度>
【参考方案3】:
您将获得对嵌入式 SWF 对象的引用,并使用它来调用您的 as3 方法。
//AS3 Code
ExternalInterface.addCallback("helloFromJS",helloFromJS);
private function helloFromJS():void
trace("JS is saying hello");
//HTML Code
<object id="Test">
<param name="movie" value="Test.swf"/>
//JS Code
var swfObject = document.getElementById("Test");
swfObject.helloFromJS();
【讨论】:
【参考方案4】:这里有一个有趣且相当详细的教程 http://bytes.com/topic/flash/answers/694359-how-do-i-access-flash-function-using-javascript#post2759970
【讨论】:
【参考方案5】: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
此页面很好地描述了解决方案,只需尝试使该示例工作即可。这样你就可以解决问题了,Vladimir Tsvetkov 的回答就完成了。
【讨论】:
以上是关于如何从 javascript 调用 flash actionscript 回调方法?的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3 从Flash文件(AS3)调用Javascript(JS)函数
如何使用 Javascript 捕获 Flash Player 的事件
将数组从 Flash (AS3) 发送到 JavaScript
如何使用 Flash (AS3) 从远程域调用 Flex SWF?