Een container kan alleen ActionScript-code in een functie aanroepen; een container kan verder geen ActionScript-code aanroepen. Als u een ActionScript-functie wilt aanroepen vanuit de containertoepassing, moet u het volgende doen: de functie registreren bij de klasse ExternalInterface en deze vervolgens aanroepen vanuit de code van de container.
Eerst moet u uw ActionScript-functie registreren, om aan te geven dat deze beschikbaar moet zijn voor de container. Voer de methode
ExternalInterface.addCallback()
als volgt uit:
function callMe(name:String):String
{
return "busy signal";
}
ExternalInterface.addCallback("myFunction", callMe);
Voor de methode
addCallback()
zijn twee parameters nodig. De eerste, een functienaam als tekenreeks, is de naam waarmee de functie wordt herkend door de container. De tweede parameter is de daadwerkelijke ActionScript-functie, die wordt uitgevoerd wanneer de container de gedefinieerde functienaam aanroept. Omdat deze namen verschillen, kunt u een functienaam opgeven die wordt gebruikt door de container, ook als de daadwerkelijke ActionScript-functie een andere naam heeft. Dit is met name zinvol als de functienaam onbekend is; bijvoorbeeld als een anonieme functie is opgegeven, of als de aan te roepen functie bij uitvoering wordt bepaald.
Nadat een ActionScript-functie is geregistreerd met de klasse ExternalInterface, kan de container de functie daadwerkelijk aanroepen. De wijze waarop hangt af van het type container. De ActionScript-functie wordt bijvoorbeeld in een JavaScript-code in een webbrowser aangeroepen met behulp van de geregistreerde functienaam, ook al is dit een methode van het Flash Player-browserobject (dat wil zeggen een methode van het JavaScript-object dat de tag
object
of
embed
vertegenwoordigt). |Met andere woorden worden er parameters doorgegeven en een resultaat geretourneerd, ook al wordt er een lokale functie aangeroepen.
<script language="JavaScript">
// callResult gets the value "busy signal"
var callResult = flashObject.myFunction("my name");
</script>
...
<object id="flashObject"...>
...
<embed name="flashObject".../>
</object>
Wanneer u een ActionScript-functie aanroept in een SWF-bestand dat wordt uitgevoerd in een bureaubladtoepassing, moeten de geregistreerde functienaam en mogelijke parameters in serie in een XML-tekenreeks worden gecodeerd. De aanroep wordt in dat geval daadwerkelijk uitgevoerd door de methode
CallFunction()
van het ActiveX-besturingselement aan te roepen met de XML-tekenreeks als parameter. Zie
XML-indeling van externe API
voor meer informatie over de XML-indeling die voor deze communicatie wordt gebruikt.
In beide gevallen wordt de geretourneerde waarde van de ActionScript-functie doorgegeven aan de containercode, ofwel rechtstreeks als waarde wanneer de aanroeper een JavaScript-code in een browser is, ofwel gecodeerd met serienummering in een XML-tekenreeks wanneer de aanroeper een ActiveX-container is.