我尝试从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();
});
始终在火警控制台“flashFile.js_method_to_call不是函数”中显示错误。
答案 0 :(得分:14)
这里的东西应该非常好用:
使用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();
}
答案 1 :(得分:8)
您将获得对嵌入式SWF对象的引用,并使用它来调用您的as3方法。
//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();
答案 2 :(得分:1)
这里有一个有趣且非常详细的教程 http://bytes.com/topic/flash/answers/694359-how-do-i-access-flash-function-using-javascript#post2759970
答案 3 :(得分:1)
此页面非常好地描述了解决方案,只是尝试使该示例正常工作。所以你可以解决问题,弗拉基米尔Tsvetkov的答案是完整的。
答案 4 :(得分:0)
我不确定这一行:
var flashFile = eval("window.document.test");
我会用:
var flashFile = document.getElementById("test");
此外,我猜这只是在粘贴时错误,但flashFile.js_method_to_call;
应为flashFile.js_method_to_call();