Javascript HTML到嵌入式闪存-外部接口回调赢得';行不通

Javascript HTML到嵌入式闪存-外部接口回调赢得';行不通,javascript,html,actionscript-3,flash,Javascript,Html,Actionscript 3,Flash,我是一名HTML新手,因此我非常感谢您的帮助 我想在HTML JS和嵌入式SWF之间进行通信。 我可以从Flash中调用html中的JS函数。但是我不能从JS回调到Flash 我已经将代码剥离到最低限度,但仍然没有成功。以下是我的AS3代码: package { import flash.events.Event; import flash.events.MouseEvent; import flash.display.Sprite; import flash.external.Externa

我是一名HTML新手,因此我非常感谢您的帮助

我想在HTML JS和嵌入式SWF之间进行通信。 我可以从Flash中调用html中的JS函数。但是我不能从JS回调到Flash

我已经将代码剥离到最低限度,但仍然没有成功。以下是我的AS3代码:

package
{
import flash.events.Event; 
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.external.ExternalInterface;


public class CFacebook extends Sprite
{
    public function CFacebook()
    {
        init();
    }

    private function init():void
    {
        ExternalInterface.addCallback("myFlashcall",myFlashcall); 
        btn1.addEventListener(MouseEvent.CLICK, onClick1); 
        btn2.addEventListener(MouseEvent.CLICK, onClick2); 
    }

    public function myFlashcall(str:String):void
    {
        txtDebug.text = "myFlashcall = " + str;
    }

    protected function onClick1(event:MouseEvent):void
    {
        ExternalInterface.call("myFBcall1"); 
    }

    protected function onClick2(event:MouseEvent):void
    {
        ExternalInterface.call("myFBcall2"); 
    }

}
}
这一切都可以工作-除了从不调用的回调。这是我的HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Simple Flash Embed</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<script type="text/javascript" >
function myFBcall1()
{
    alert("test1");
}

function myFBcall2()
{
    document.getElementById("SwfFacebook").myFlashcall("IT WORKS");
    alert("test2");
}
</script>

</head>
<body>
<object type="application/x-shockwave-flash"
data="SwfFacebook.swf"
width="640" height="480">
<param name="movie" value="SwfFacebook.swf" />
<param name="allowScriptAccess" value="always"/>
<param name="allowFullScreen" value="true"/>
<p>Alternative content -- Can contain any HTML: DIVs, IMGs, etc.</p>
</object>
</body>
</html>

简单闪存嵌入
函数myFBcall1()
{
警报(“测试1”);
}
函数myFBcall2()
{
document.getElementById(“SwfFacebook”).myFlashcall(“它工作”);
警报(“测试2”);
}
可选内容——可以包含任何HTML:div、IMGs等

单击第一个按钮时会显示我的第一个警报。第二个警报永远不会显示,SWF中的回调函数也永远不会调用


感谢您,您没有嵌入式SWF的ID,因此当您拨打电话时:

document.getElementById("SwfFacebook").myFlashcall("IT WORKS");
什么也没发生

我强烈建议您使用SWFObject嵌入工具,它现在几乎是一个标准。

嵌入swf时,只需传递一个Args数组,如下所示:

var attributes = {
    id:"flashObject",
    name: "flashObject",
};
或者你想要的任何身份证或名字

document.getElementById("flashObject").myFlashcall("IT WORKS");
如果您使用的是Flash Builder、Flash Develop甚至Intellij IDEA,它会自动生成一个包含swfobject的索引HTML页面,因此您只需调整id和/或名称字段。(您应该至少有一个id字段不为空)

顺便说一句,我建议您在添加回调或调用外部函数之前检查ExternalInterface的可用性:

private function init():void
{
    if(ExternalInterface.available)
    {
        ExternalInterface.addCallback("myFlashcall",myFlashcall); 
        btn1.addEventListener(MouseEvent.CLICK, onClick1); 
        btn2.addEventListener(MouseEvent.CLICK, onClick2); 
    }
}
========== UPDT:

有时(当使用默认的Chrome flash player时),它在本地不工作,如果您在任何远程服务器上启动应用程序,它就会工作。尝试将其上传到某个地方并检查