2010-02-24 52 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