En behållare kan bara anropa ActionScript-kod som är i en funktion. Ingen annan ActionScript-kod kan anropas av en behållare. För att kunna anropa en ActionScript-funktion från behållarprogrammet måste du göra två saker: registrera funktionen med klassen ExternalInterface och sedan anropa den från behållarens kod.
Först måste du registrera ActionScript-funktionen för att ange att den ska vara tillgänglig för behållaren. Använd metoden
ExternalInterface.addCallback()
på följande sätt:
function callMe(name:String):String
{
return "busy signal";
}
ExternalInterface.addCallback("myFunction", callMe);
Metoden
addCallback()
används med två parametrar. Den första, som är ett funktionsnamn i form av en sträng, är namnet som kommer att användas för funktionen i behållaren. Den andra parametern är den faktiska ActionScript-funktion som körs när behållaren anropar det definierade funktionsnamnet. Eftersom namnen är åtskilda kan du ange ett funktionsnamn som ska användas i behållaren även om ActionScript-funktionen har ett annat namn. Det är särskilt användbart om funktionsnamnet är okänt, till exempel om en anonym funktion anges eller om det inte avgörs förrän under körning vilken funktion som ska anropas.
När en ActionScript-funktion har registrerats i klassen ExternalInterface kan behållaren anropa den. Hur detta görs varierar beroende på behållartypen. I JavaScript-kod i en webbläsare anropas till exempel ActionScript-funktionen med det registrerade funktionsnamnet som om det vore en metod i Flash Player-objektet i webbläsaren (d.v.s. en metod i JavaScript-objektet som representerar
object
- eller
embed
-taggen). Med andra ord skickas parametrar och resultatet returneras som om en lokal funktion hade anropats.
<script language="JavaScript">
// callResult gets the value "busy signal"
var callResult = flashObject.myFunction("my name");
</script>
...
<object id="flashObject"...>
...
<embed name="flashObject".../>
</object>
När en ActionScript-funktion anropas i en SWF-fil som körs i ett skrivbordsprogram måste det registrerade funktionsnamnet och alla parametrar serialiseras i en XML-formaterad sträng. Anropet utförs sedan genom att metoden
CallFunction()
i ActiveX-kontrollen anropas med XML-strängen som parameter. Mer information om det XML-format som används för den här kommunikationen finns i
Det externa API:ts XML-format
.
I båda fallen skickas ActionScript-funktionens returvärde tillbaka till behållarkoden, antingen direkt som ett värde när anroparen är JavaScript-kod i en webbläsare eller serialiserad som en XML-formaterad sträng när anroparen är en ActiveX-behållare.