Naslaggids voor Adobe ActionScript® 3.0 voor het Adobe® Flash®-platform
Startpagina  |  Lijst met pakketten en klassen verbergen |  Pakketten  |  Klassen  |  Nieuw  |  Index  |  Bijlagen  |  Waarom in het Engels?
Filters: Gegevens ophalen van server...
Gegevens ophalen van server...
flash.external 

ExternalInterface  - AS3

Pakketflash.external
Klassepublic final class ExternalInterface
OverervingExternalInterface Inheritance Object

Taalversie: ActionScript 3.0
Runtimeversies: AIR 1.0, Flash Player 9, Flash Lite 4

De ExternalInterface-klasse is een programmeerinterface voor toepassingen waarmee eenvoudig kan worden gecommuniceerd tussen ActionScript en de SWF-container, bijvoorbeeld een HTML-pagina met JavaScript of een bureaubladtoepassing waarmee een SWF-bestand wordt weergegeven met Flash Player.

Met de ExternalInterface-klasse kunt u een ActionScript-functie aanroepen in de Flash-runtime, waarbij u JavaScript in de HTML-pagina gebruikt. De ActionScript-functie kan een waarde retourneren en JavaScript ontvangt deze direct als geretourneerde waarde van de aanroep.

Deze functionaliteit vervangt de methode fscommand().

Gebruik de klasse ExternalInterface bij de volgende combinaties van browser en besturingssysteem:

BrowserBesturingssysteemBesturingssysteem
Internet Explorer 5.0 en hogerWindows 
Netscape 8.0 en hogerWindows MacOS 
Mozilla 1.7.5 en hogerWindows MacOS 
Firefox 1.0 en hogerWindows MacOS 
Safari 1.3 en hoger  MacOS 

Flash Player voor Linux versie 9.0.31.0 en hoger ondersteunt de klasse ExternalInterface in de volgende browsers:

Browser
Mozilla 1.7.x en hoger
Firefox 1.5.0.7 en hoger
SeaMonkey 1.0.5 en hoger

De klasse ExternalInterface gebruikt de webbrowser van de gebruiker om ActiveX® of de NPRuntime-API te ondersteunen die door sommige browsers wordt gebruikt voor scriptbewerkingen voor insteekmodules. Ook als een combinatie van een browser en besturingssysteem hierboven niet wordt vermeld, ondersteunen deze de klasse ExternalInterface als ze de NPRuntime-API ondersteunen. Raadpleeg http://www.mozilla.org/projects/plugins/npruntime.html.

Opmerking: als u SWF-bestanden insluit in een HTML-pagina, moet u ervoor zorgen dat het kenmerk id is ingesteld en dat de kenmerken id en name van de tags object en embed de volgende tekens niet bevatten:

 . - + * / \
 

Opmerking voor Flash Player-toepassingen: Flash Player versie 9.0.115.0 en hoger biedt ondersteuning voor . (punt) worden gebruikt binnen de kenmerken id en name.

Opmerking voor Flash Player-toepassingen: als u Flash Player 10 of hoger uitvoert in een browser en deze klasse via de programmacode gebruikt om een pop-upvenster te openen, lukt dit mogelijk niet. Verschillende browsers (en browserconfiguraties) blokkeren pop-upvensters namelijk vaak en er kan dus niet worden gegarandeerd dat het venster daadwerkelijk wordt weergegeven. De meeste kans op succes hebt u als u deze klasse alleen gebruikt om een pop-upvenster te openen in code die wordt uitgevoerd als een direct resultaat van een gebruikersactie (zoals in een gebeurtenishandler voor een muisklik of het indrukken van een toets.)

Vanuit ActionScript hebt u op de HTML-pagina de volgende mogelijkheden:

  • U kunt een JavaScript-functie aanroepen.
  • U kunt elk aantal argumenten doorgeven.
  • U kunt verschillende gegevenstypen doorgeven (zoals Boolean, Number, String, enzovoort).
  • U kunt een geretourneerde waarde ontvangen van de JavaScript-functie.

Vanuit JavaScript kunt u op de HTML-pagina:

  • Een ActionScript-functie aanroepen.
  • Argumenten doorgeven met een notatie voor standaardfunctieaanroep.
  • Een waarde naar de JavaScript-functie retourneren.

Opmerking voor Flash Player-toepassingen: Flash Player biedt momenteel geen ondersteuning voor SWF-bestanden die zijn ingesloten in HTML-formulieren.

Opmerking voor AIR-toepassingen: in Adobe AIR kunt u met de ExternalInterface-klasse communiceren tussen JavaScript in een HTML-pagina dat is geladen in het HTMLLoader-besturingselement en ActionScript in SWF-inhoud dat is ingesloten in de desbetreffende HTML-pagina.

Bekijk de voorbeelden

Meer voorbeelden

Verwante API-elementen



Openbare eigenschappen
 EigenschapGedefinieerd door
  available : Boolean
[statisch] [alleen-lezen] Hiermee wordt aangegeven of deze speler zich in een container bevindt die een externe interface biedt.
ExternalInterface
 Inheritedconstructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie.
Object
  marshallExceptions : Boolean = false
[statisch] Geeft aan of de externe interface moet proberen ActionScript-uitzonderingen door te geven aan de huidige browser en JavaScript-uitzonderingen aan de speler.
ExternalInterface
  objectID : String
[statisch] [alleen-lezen] Hiermee wordt het kenmerk id van de tag object in Internet Explorer of het kenmerk name van de tag embed in Netscape geretourneerd.
ExternalInterface
Openbare methoden
 MethodeGedefinieerd door
  
addCallback(functionName:String, closure:Function):void
[statisch] Hiermee wordt een ActionScript-methode geregistreerd als aanroepbaar vanuit de container.
ExternalInterface
  
call(functionName:String, ... arguments):*
[statisch] Roept een functie aan die door de SWF-container beschikbaar wordt gemaakt, waarbij nul of meer argumenten worden doorgegeven.
ExternalInterface
 Inherited
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd.
Object
 Inherited
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven.
Object
 Inherited
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd.
Object
 Inherited
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in.
Object
 Inherited
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies.
Object
 Inherited
Retourneert een tekenreeksrepresentatie van het opgegeven object.
Object
 Inherited
Retourneert de primitieve waarde van het opgegeven object.
Object
Eigenschapdetails

available

eigenschap
available:Boolean  [alleen-lezen]

Taalversie: ActionScript 3.0
Runtimeversies: AIR 1.0, Flash Player 9, Flash Lite 4

Hiermee wordt aangegeven of deze speler zich in een container bevindt die een externe interface biedt. Als de externe interface beschikbaar is, is deze eigenschap true; anders is deze false.

Opmerking: wanneer u de externe API met HTML gebruikt, moet u altijd controleren of de HTML volledig is geladen voordat u een JavaScript-methode aanroept.



Implementatie
    public static function get available():Boolean

Voorbeeld  ( Hoe dit voorbeeld te gebruiken )
In het volgende voorbeeld wordt de eigenschap available gebruikt om te bepalen of de speler zich in een container bevindt met een externe interface.
     package {
       import flash.text.TextField;
       import flash.display.MovieClip;
       import flash.external.ExternalInterface;
     
       public class extint_test extends MovieClip {
         public function extint_test() {
           var isAvailable:Boolean = ExternalInterface.available;
           var availTxt:TextField = new TextField();
           availTxt.text = isAvailable.toString();
           addChild(availTxt);
         }
       }
     }
     

marshallExceptions

eigenschap 
public static var marshallExceptions:Boolean = false

Taalversie: ActionScript 3.0
Runtimeversies: AIR 1.0, Flash Player 9.0.115.0, Flash Lite 4

Geeft aan of de externe interface moet proberen ActionScript-uitzonderingen door te geven aan de huidige browser en JavaScript-uitzonderingen aan de speler. U moet deze eigenschap expliciet instellen op true om JavaScript-uitzonderingen in ActionScript en ActionScript-uitzonderingen in JavaScript af te vangen.

Verwante API-elementen


Voorbeeld  ( Hoe dit voorbeeld te gebruiken )
In het volgende voorbeeld wordt een ActionScript-functie gemaakt en geregistreerd met de bevattende browser via de methode addCallback(). De nieuwe functie genereert een uitzondering, zodat deze kan worden afgevangen door JavaScript-code die wordt uitgevoerd in de browser. Dit voorbeeld bevat ook een instructie try..catch om uitzonderingen af te vangen die door de browser worden gegenereerd wanneer de functie throwit() wordt aangeroepen.
package
{
    import flash.external.*
    import flash.net.*;
    import flash.display.*;
    import flash.system.System;
    public class ext_test extends Sprite {
    function ext_test():void {
        ExternalInterface.marshallExceptions = true;
        ExternalInterface.addCallback("g", g);

        try {
        ExternalInterface.call("throwit");
        } catch(e:Error) {
        trace(e)
        }
    }
    function g() { throw new Error("exception from actionscript!!!!") }
    }
}

objectID

eigenschap 
objectID:String  [alleen-lezen]

Taalversie: ActionScript 3.0
Runtimeversies: AIR 1.0, Flash Player 9, Flash Lite 4

Hiermee wordt het kenmerk id van de tag object in Internet Explorer of het kenmerk name van de tag embed in Netscape geretourneerd.



Implementatie
    public static function get objectID():String
Methodedetails

addCallback

()methode
public static function addCallback(functionName:String, closure:Function):void

Taalversie: ActionScript 3.0
Runtimeversies: AIR 1.0, Flash Player 9, Flash Lite 4

Hiermee wordt een ActionScript-methode geregistreerd als aanroepbaar vanuit de container. Na aanroep van addCallBack() kan de geregistreerde functie in de speler door JavaScript- of ActiveX-code in de container worden aangeroepen.

Opmerking: voor het lokaal uitvoeren van inhoud in een browser, werken aanroepen van de methode ExternalInterface.addCallback() alleen wanneer het SWF-bestand en de bijbehorende webpagina zich in de beveiligingssandbox Lokaal-vertrouwd bevinden. Lees voor meer informatie het onderwerp Security in het Flash Player Developer Center.

Parameters

functionName:String — De naam waarmee de container de functie kan aanroepen.
 
closure:Function — De functie closure die moet worden aangeroepen. Dit kan een zelfstandige functie zijn of een methode closure die verwijst naar een methode van een objectinstantie. Door een methode closure door te geven, kunt u de callback naar een methode van een specifieke objectinstantie sturen.

Opmerking: als u addCallback() herhaaldelijk uitvoert op een bestaande callbackfunctie met een sluitwaarde null, wordt de callback verwijderd.


Gegenereerde uitzondering
Error — De container ondersteunt geen binnenkomende aanroepen. Binnenkomende aanroepen worden alleen ondersteund door Internet Explorer voor Windows en browsers die de API NPRuntime gebruiken, zoals Mozilla 1.7.5 en hoger of Firefox 1.0 en hoger.
 
SecurityError — Er is al een opgegeven naam aan een sandbox toegevoegd door ActionScript, waartoe u geen toegang hebt. U kunt de callback niet overschrijven. U kunt dit omzeilen door de ActionScript die oorspronkelijk de methode addCallback() aanriep, te herschrijven zodat deze ook de methode Security.allowDomain() aanroept.
 
SecurityError — De omgeving ervan behoort tot een beveiligingssandbox waartoe de aanroepende code geen toegang heeft. U kunt deze fout op de volgende manier oplossen:
  1. Stel de volgende parameter in de tag object in voor het SWF-bestand in de HTML-pagina:

    <param name="allowScriptAccess" value="always" />

  2. Voeg in het SWF-bestand de volgende ActionScript-code toe:

    flash.system.Security.allowDomain( sourceDomain )

Verwante API-elementen

call

()methode 
public static function call(functionName:String, ... arguments):*

Taalversie: ActionScript 3.0
Runtimeversies: AIR 1.0, Flash Player 9, Flash Lite 4

Roept een functie aan die door de SWF-container beschikbaar wordt gemaakt, waarbij nul of meer argumenten worden doorgegeven. Wanneer de functie niet beschikbaar is, retourneert de aanroep null; anders wordt de waarde geretourneerd die door de functie wordt gegeven. Herhaling is niet toegestaan voor Opera- of Netscape-browsers; in deze browsers levert een recursieve aanroep een reactie null op. (Herhaling wordt wel ondersteund door Internet Explorer- en Firefox-browsers.)

Wanneer de container een HTML-pagina is, roept deze methode een JavaScript-functie in een script-element aan.

Wanneer de container een andere ActiveX-container is, verzendt deze methode een gebeurtenis FlashCall ActiveX met de opgegeven naam en verwerkt de container de gebeurtenis.

Wanneer de container als host fungeert voor de Netscape-insteekmodule, kunt u aangepaste ondersteuning voor de nieuwe NPRuntime-interface schrijven of een HTML-besturingselement insluiten en de speler in het HTML-besturingselement insluiten. Wanneer u een HTML-besturingselement insluit, kunt u communiceren met de speler via een JavaScript-interface naar de native containertoepassing.

Opmerking: voor het lokaal uitvoeren van inhoud in een browser, worden aanroepen van de methode ExternalInterface.call() alleen toegestaan wanneer het SWF-bestand en de bijbehorende webpagina zich in de beveiligingssandbox Lokaal-vertrouwd bevinden. U kunt bovendien voorkomen dat een SWF-bestand deze methode gebruikt door de parameter allowNetworking in te stellen van de tags object en embed op de HTML-pagina die de SWF-inhoud bevat. Lees voor meer informatie het onderwerp Security in het Flash Player Developer Center.

Opmerking voor Flash Player-toepassingen: in Flash Player 10 en Flash Player 9 Update 5 is deze methode in sommige webbrowsers niet mogelijk als een pop-upblokkering is ingeschakeld. In dit scenario kunt u deze methode alleen aanroepen in reactie op een gebruikersgebeurtenis (bijvoorbeeld in een gebeurtenishandler voor een muisklik of een toetsaanslag).

Parameters

functionName:String — De alfanumerieke naam van de functie die in de container wordt aangeroepen. Als u een niet-alfanumerieke functienaam gebruikt, treedt er een runtime-fout op (fout 2155). U kunt een blok try..catch gebruiken om de fout af te handelen.
 
... arguments — De argumenten die aan de functie worden doorgegeven in de container. U kunt nul of meer parameters opgeven, gescheiden door komma's. Deze parameters kunnen van elk ActionScript-gegevenstype zijn. Wanneer de aanroep op een JavaScript-functie is gericht, worden de ActionScript-gegevenstypen automatisch omgezet in JavaScript-gegevenstypen; wanneer een aanroep op een andere ActiveX-container is gericht, worden de parameters in de aanvraag gecodeerd.

Geretourneerde waarde
* — De reactie die van de container wordt ontvangen. Wanneer de aanroep is mislukt (bijvoorbeeld omdat een dergelijke functie niet aanwezig is in de container, de interface niet beschikbaar is, een herhaling is opgetreden (met een Netscape- of Opera-browser) of er een beveiligingsprobleem is), wordt null geretourneerd en een fout gegenereerd.

Gegenereerde uitzondering
Error — De container ondersteunt geen uitgaande aanroepen. Uitgaande aanroepen worden alleen ondersteund door Internet Explorer voor Windows en browsers die de API NPRuntime gebruiken, zoals Mozilla 1.7.5 en hoger of Firefox 1.0 en hoger.
 
SecurityError — De omgeving ervan behoort tot een beveiligingssandbox waartoe de aanroepende code geen toegang heeft. U kunt deze fout op de volgende manier oplossen:
  1. Stel de volgende parameter in de tag object in voor het SWF-bestand in de HTML-pagina:

    <param name="allowScriptAccess" value="always" />

  2. Voeg in het SWF-bestand de volgende ActionScript-code toe:

    flash.system.Security.allowDomain( sourceDomain )


Voorbeeld  ( Hoe dit voorbeeld te gebruiken )

In het volgende voorbeeld kunt u zien hoe u met de ExternalInterface-klasse (flash.external.ExternalInterface) een tekenreeks van Flash Player kunt versturen naar de HTML-container, waar deze wordt weergegeven met de functie JavaScript alert(). Voorbeeld van ActionScriptExamples.com.
//
// Requires:
//   - A Flash Professional Label component on the Stage with an instance name of "lbl".
//   - A Flash Professional Button component on the Stage with an instance name of "button".
//
var xmlResponse:String = "<invoke name=\"isReady\" returntype=\"xml\"><arguments><number>1</number><number>" + stage.stageWidth + "</number><number>" + stage.stageHeight + "</number></arguments></invoke>";
 
lbl.text = "ExternalInterface.available: " + ExternalInterface.available;
lbl.width = 200;
button.enabled = ExternalInterface.available;
button.addEventListener(MouseEvent.CLICK, button_click);
 
function button_click(evt:MouseEvent):void {
    ExternalInterface.call("alert", xmlResponse);
}
ExternalInterfaceExample.as

In het volgende voorbeeld wordt weergegeven hoe gegevens worden verzonden tussen Flash Player en een HTML-container.
package  {
    
    import flash.display.Sprite;
    import flash.events.*;
    import flash.external.ExternalInterface;
    import flash.text.TextField;
    import flash.utils.Timer;
    import flash.text.TextFieldType;
    import flash.text.TextFieldAutoSize;
    import flash.system.Security;
    
    public class ExternalInterfaceExample extends Sprite 
    {
        
    private var input:TextField;
        private var output:TextField;
        private var sendBtn:Sprite;
        
        public function ExternalInterfaceExample() 
        {
            // constructor code
            Security.allowDomain("*");
            
            
            input = new TextField();
            input.type = TextFieldType.INPUT;
            input.background = true;
            input.border = true;
            input.width = 350;
            input.height = 18;
            addChild(input);

            sendBtn = new Sprite();
            sendBtn.mouseEnabled = true;
            sendBtn.x = input.width + 10;
            sendBtn.graphics.beginFill(0xcccccc);
            sendBtn.graphics.drawRoundRect(0, 0, 80, 18, 10, 10);
            sendBtn.graphics.endFill();
            sendBtn.addEventListener(MouseEvent.CLICK, clickHandler);
            addChild(sendBtn);

            output = new TextField();
            output.y = 25;
            output.width = 450;
            output.height = 325;
            output.multiline = true;
            output.wordWrap = true;
            output.border = true;
            output.text = "Initializing...\n";
            addChild(output);
            
            
            if (ExternalInterface.available) {
                try {
                    output.appendText("Adding callback...\n");
                    ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript);
                    if (checkJavaScriptReady()) {
                        output.appendText("JavaScript is ready.\n");
                    } else {
                        output.appendText("JavaScript is not ready, creating timer.\n");
                        var readyTimer:Timer = new Timer(100, 0);
                        readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
                        readyTimer.start();
                    }
                } catch (error:SecurityError) {
                    output.appendText("A SecurityError occurred: " + error.message + "\n");
                } catch (error:Error) {
                    output.appendText("An Error occurred: " + error.message + "\n");
                }
            } else {
                output.appendText("External interface is not available for this container.");
            }
        }
        private function receivedFromJavaScript(value:String):void {
            output.appendText("JavaScript says: " + value + "\n");
        }
        private function checkJavaScriptReady():Boolean {
            var isReady:Boolean = ExternalInterface.call("isReady");
            return isReady;
        }
        private function timerHandler(event:TimerEvent):void {
            output.appendText("Checking JavaScript status...\n");
            var isReady:Boolean = checkJavaScriptReady();
            if (isReady) {
                output.appendText("JavaScript is ready.\n");
                output.appendText("ExternalInterface.objectID = " + ExternalInterface.objectID + "\n");
                Timer(event.target).stop();
            }
        }
        private function clickHandler(event:MouseEvent):void {
            if (ExternalInterface.available) {
                ExternalInterface.call("sendToJavaScript", input.text);
            }
        }
    }
}


Sluit het gegenereerde SWF-bestand in met de volgende HTML-sjabloon om de vorige ActionScript-code te testen:
 <!-- saved from url=(0014)about:internet -->
 <html lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>ExternalInterfaceExample</title>
 <script language="JavaScript">
     var jsReady = false;
     function isReady() {
         return jsReady;
     }
     function pageInit() {
         jsReady = true;
         document.forms["form1"].output.value += "\n" + "JavaScript is ready.\n";
     }
     function sendToActionScript(value) {
       document.getElementById("ExternalInterfaceExample").sendToActionScript(value);
     }
     function sendToJavaScript(value) {
         document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
     }
 </script>
 </head>
 <body onload="pageInit();">
 
  <object id="ExternalInterfaceExample"  name="ExternalInterfaceExample" 
  type="application/x-shockwave-flash" data="ExternalInterfaceExample.swf" width="550" height="400">
    <param name="movie" value="ExternalInterfaceExample.swf"/>
    <param name="quality" value="high"/>
    <param name="allowscriptaccess" value="always"/>
    <a href="http://www.adobe.com/go/getflash">
        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player"/>
    </a>
  </object>
 
     <form name="form1" onsubmit="return false;">
         <input type="text" name="input" value="" />
         <input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br />
         <textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea>
     </form>
 
 </body>
 </html>
 




[ X ]Waarom in het Engels?
Sommige inhoud van de Naslaggids voor ActionScript 3.0 staat in het Engels

Niet alle onderdelen van de Naslaggids voor ActionScript 3.0 zijn in alle talen vertaald. Wanneer een taalelement niet is vertaald, wordt het in het Engels weergegeven. Zo is de klasse ga.controls.HelpBox niet in elke taal vertaald. In de Nederlandse versie van de naslaggids wordt de klasse ga.controls.HelpBox bijvoorbeeld in het Engels weergegeven.