【问题标题】:HTML to embedded Flash - ExternalInterface callback won't workHTML 到嵌入式 Flash - ExternalInterface 回调不起作用
【发布时间】:2013-08-07 05:45:06
【问题描述】:

我是 HTML 新手,非常感谢您的帮助。

我想在我的 HTML JS 和我的嵌入式 SWF 之间进行通信。 我可以在我的 html 中从 Flash 调用我的 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>

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

感谢

【问题讨论】:

    标签: javascript html actionscript-3 flash


    【解决方案1】:

    您没有嵌入的 SWF 的 ID,所以当您拨打电话时:

    document.getElementById("SwfFacebook").myFlashcall("IT WORKS");
    

    什么都没有发生。

    我强烈推荐你使用 SWFObject 嵌入工具,它现在几乎是一个标准。 Link to library

    当您嵌入您的 swf 时,您只需像这样传递一个 Args 数组:

    var attributes = {
        id:"flashObject",
        name: "flashObject",
    };
    

    或者你想要的任何 ID 或名称并调用

    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 播放器时)它无法在本地运行,但如果您在任何远程服务器上启动您的应用程序则可以运行。尝试将其上传到某处并检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 2012-11-17
      • 2011-05-21
      相关资源
      最近更新 更多