2011-04-15 40 views
1

如何解決mxml程序中的以下錯誤?flex中的ExternalInterface API

的錯誤是

 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> 

回答

2

你應該嘗試把這個調用到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(); 
+0

如何從js中調用addBody now ..? – Naveen 2011-04-15 11:53:22

+0

檢查我的樣品更新。請注意,afaik'document.getElementById'將返回你只需要在ie瀏覽器中的對象(至少在2-3年前就是這種情況)。如果你需要,我可以分享我的js解決方法爲其他瀏覽器太 – rekaszeru 2011-04-15 12:15:43

+0

我已經發布完整的代碼在http://stackoverflow.com/questions/5675870/javascript-error-on-calling-flex-as-function你可以請點擊它.. – Naveen 2011-04-15 12:16:25

相關問題