【问题标题】:ExternalInterface API in flexflex 中的 ExternalInterface API
【发布时间】:2011-08-06 04:57:18
【问题描述】:

mxml程序出现如下错误如何解决?

错误是

       Loading configuration file /opt/flex/frameworks/flex-config.xml
       /home/tom-j/programs/flex/html/aa.mxml(17):  Error: Access of undefined property addBody.

       ExternalInterface.addCallback("addBody", addBody);

Program is

     <?xml version="1.0" encoding="utf-8"?>
     <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

     <mx:Script>
     <![CDATA[

     import mx.controls.Button;
     import mx.controls.Alert;
     import flash.display.InteractiveObject;
     import flash.display.Sprite;
     import flash.media.*;
     import flash.net.*;
     import flash.external.*;
     import flash.external.ExternalInterface;

     //                "javascript function", flash function
     ExternalInterface.addCallback("addBody", addBody);

     public function addBody():void
     {
       Alert.show("Got input from JS");
     }
         ]]>                
     </mx:Script>
     </mx:Application>

【问题讨论】:

    标签: apache-flex actionscript-3 adobe mxml mxmlc


    【解决方案1】:

    您应该尝试将此调用放入 onCreationComplete 事件处理程序:

    protected function onCreationComplete(event:FlexEvent):void
    {
        //just in case to prevent security exceptions:
        Security.allowDomain("*.yourdomain.com");
        Security.allowDomain("localhost");
        ExternalInterface.addCallback("addBody", addBody);
    }
    

    引发的错误可能是因为在处理addCallback 行时,不存在addBody 方法。

    更新从javascript调用addBody方法

    在您的 html 中,您必须嵌入 swf 〜像这样:

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="your_flash_app" width="1000" height="520"
        codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
        <param name="movie" value="YourFlashApp.swf" />
        <param name="quality" value="high" />
        <param name="bgcolor" value="#bee3f6" />
        <param name="allowScriptAccess" value="always" />
        <embed src="YourFlashApp.swf" quality="high" bgcolor="#bee3f6" width="1000" height="520" name="your_flash_app" align="middle" play="true" loop="false"
            quality="high" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer">
        </embed>
    </object>
    

    要从 javascript 调用 addBody 方法,首先您必须在其中找到 flash 应用程序:

    //this only works for sure in IE browsers, but there are workarounds 
    //to deal with the others.
    var flashApp = document.getElementById("your_flash_app");
    flashApp.addBody();
    

    【讨论】:

    • 现在如何从js调用addBody..?
    • 检查我的样本更新。请注意,afaik document.getElementById 将返回您仅在 ie 浏览器中需要的对象(至少这是 2-3 年前的情况)。如果您需要,我也可以为其他浏览器分享我的 js 解决方法
    • 我已经在stackoverflow.com/questions/5675870/… 上发布了完整的代码,你可以看看它..
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2011-01-07
    • 2010-12-24
    • 2011-11-08
    • 2011-03-14
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多