2010-02-24 51 views
1

我知道使用ExternalInterface,我们可以注册可从JavaScript调用的ActionScript函数,但是我想为在应用程序中创建多个实例的一个类注册actionscript函数。那么它将如何识别哪个对象动作脚本函数将从java脚本中调用。Flex通知多个对象的Javascript通知

例如:

1)的Java脚本:具有功能javaScripAlert(),它调用动作脚本函数showAlert();

即,testSwf.alert(value);

函数javaScripAlert(值){

TestSwf.alert(); 

}

2)类ABC具有回呼功能showAlert(值);它在类中注册回调函数“showAlert”..

即, ExternalInterface的。 addCallback(“alert”,showAlert);

3)TestApplication:在此我已经创建CALSS ABC的多个对象

我在TestApplication创建的类型ABC的多个对象。所以当我从HTML调用javaScript函数javaScripAlert()时,它只调用对象“abc3”的函数showAlert(value)而不调用其他对象abc1,abc2。

那么其他对象的功能当时也称为任何方式。

感谢&问候, 桑杰Ruparelia

回答

0

每个ActionScript对象调用ExternalInterface.addCallback("myCallback", myCallback)将覆盖JavaScript回调。因此,最后一个要调用的Actionscript对象获胜。

的TestObject。MXML

<?xml version="1.0" encoding="utf-8"?> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" 
    initialize="registerCallback()"> 
    <mx:Script> 
     <![CDATA[ 
      import flash.external.ExternalInterface; 

      protected function registerCallback():void 
      { 
       if (ExternalInterface.available) 
       { 
        ExternalInterface.addCallback("myCallback", myCallback); 
       } 
      } 

      protected function myCallback():void 
      { 
       trace(this); 
      } 

      protected function callJavascript():void 
      { 
       ExternalInterface.call("myCallback"); 
      } 
     ]]> 
    </mx:Script> 
    <mx:Panel width="100%" height="100%" click="callJavascript()"/> 
</mx:Canvas> 

Javascript语言,HTML

function myCallback() 
{ 
    getFlashContent().myCallback(); 
} 
function getFlashContent() 
{ 
    return document.getElementById("MyApp"); 
} 

示例应用程序

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

    <mx:Panel id="panel" width="100%" height="100%" > 
     <local:TestObject width="100%" height="50"/> 
     <local:TestObject width="100%" height="50"/> 
     <local:TestObject width="100%" height="50"/> 
    </mx:Panel> 

</mx:Application> 

输出(点击时)

MyApp.panel.TestObject34 
MyApp.panel.TestObject34 
MyApp.panel.TestObject34 

解决方法是在Manager/Util类中调用所有这些ExternalInterface.addCallback("myCallback", myCallback);调用(某种类似单例的东西)。然后确保你只添加一次。然后您可以将单个项目传递给方法。

兰斯

+0

非常感谢你, 有很大帮助 桑杰 – 2010-02-24 07:31:07

+0

你介意将其标记为正确的,如果它的工作呢? – 2010-03-07 02:58:43