ExternalInterface回调未定义AS3

时间:2015-07-09 06:14:37

标签: javascript actionscript-3 flash

我是AS3的新手,想从javascript触发as3函数。

AS3

package code {
    import flash.display.MovieClip;
    import flash.external.ExternalInterface;
    import flash.text.TextFormat;

    public class Main extends MovieClip {
        public function Main() {
            ExternalInterface.addCallback("changesize", this.setStyle);
        }

        protected function setStyle() {
            var tf:TextFormat = new TextFormat();
            tf.size = 15;

            editabletext.setTextFormat(tf);
        }
    }
}

HTML

    <html><head>
            <meta charset="UTF-8">
            <title>animator</title>
            <style type="text/css" media="screen">
            html, body { height:100%; background-color: #ffffff;}
            body { margin:0; padding:0; overflow:hidden; }
            #flashContent { width:100%; height:100%; }
            </style>
        </head>
        <body>
            <div id="flashContent">
                <object type="application/x-shockwave-flash" data="animator.swf" width="550" height="400" id="animator" style="float: none; vertical-align:middle">
                    <param name="movie" value="animator.swf">
                    <param name="quality" value="high">
                    <param name="bgcolor" value="#ffffff">
                    <param name="play" value="true">
                    <param name="loop" value="true">
                    <param name="wmode" value="window">
                    <param name="scale" value="showall">
                    <param name="menu" value="true">
                    <param name="devicefont" value="false">
                    <param name="salign" value="">
                    <param name="allowScriptAccess" value="always">
                    <a href="http://www.adobe.com/go/getflash">
                        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player">
                    </a>
                </object>
            </div>

        <script type="text/javascript">
            var animator = document.getElementById('animator');
            animator.changesize();
        </script>

    </body></html>

animator.changesize()给了我Uncaught TypeError: animator.changesize is not a function

我还尝试更改sameDomainalways之间的权限访问权限。似乎都没有工作

2 个答案:

答案 0 :(得分:1)

这是一个时间问题。只有在Flash Player加载SWF并执行Main构造函数后,才会将回调添加到DOM中,但是在解析DOM时,您会尝试立即调用它。

由于在加载SWF之前总是会解析DOM(并且添加了回调),因此您不应该假设SWF回调始终存在并准备好进行调用。相反,SWF应该在准备就绪时调用JS。

答案 1 :(得分:0)

如评论中所述,首先检查ExternalInterface.available是否为真并在服务器上进行测试(如果您在本地设置了一个,则可能是localhost)。

我还注意到您有<object>但没有<embed>标记。某些浏览器使用object标记,而其他浏览器使用embed标记。确保这些标记的ID和名称相同。

更好的是,我建议使用swfobject,因为它可以解决这些问题并使代码更清晰。请查看SWFObject External Interface article和示例