Paket | flash.external |
Klass | public final class ExternalInterface |
Arv | ExternalInterface Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Med klassen ExternalInterface kan du anropa en ActionScript-funktion i Flash-miljön med hjälp av JavaScript på HTML-sidan. ActionScript-funktionen kan returnera ett värde och JavaScript tar emot det omedelbart som returvärde för anropet.
Den här funktionaliteten ersätter metoden fscommand()
.
Använd klassen ExternalInterface i följande kombinationer av webbläsare och operativsystem:
Webbläsare | Operativsystem | Operativsystem |
---|---|---|
Internet Explorer 5.0 och senare | Windows | |
Netscape 8.0 och senare | Windows | MacOS |
Mozilla 1.7.5 och senare | Windows | MacOS |
Firefox 1.0 och senare | Windows | MacOS |
Safari 1.3 och senare. | MacOS |
Flash Player för Linux version 9.0.31.0 och senare har stöd för klassen ExternalInterface i följande webbläsare:
Webbläsare |
---|
Mozilla 1.7.x och senare |
Firefox 1.5.0.7 och senare |
SeaMonkey 1.0.5 och senare |
Klassen ExternalInterface kräver att användarens webbläsare stöder antingen ActiveX ® eller programmeringsgränssnittet NPRuntime som visas för plugin-skriptning i vissa webbläsare. Även om en kombination av webbläsare och operativsystem inte listas ovan bör klassen ExternalInterface fungera om de har stöd för NPRuntime API. Se http://www.mozilla.org/projects/plugins/npruntime.html.
Obs! När du bäddar in SWF-filer i en HTML-sida måste du se till att id
-attributet är inställt och att id
- och name
-attributen i object
- och embed
-taggarna inte innehåller följande tecken:
. - + * / \
Att observera för Flash Player-program: Flash Player version 9.0.115.0 och senare tillåter .
(punkt) -tecken i id
- och name
-attributen.
Att observera för Flash Player-program: Det kan hända att det misslyckas om du använder den här klassen programmatiskt för att öppna ett popup-fönster i Flash Player 10 eller senare som körs i en webbläsare. Olika webbläsare (och webbläsarinställningar) kan när som helst blockera popup-fönster. Det går inte att garantera att ett popup-fönster visas. Störst möjlighet att lyckas får du om du endast använder den här klassen för att öppna popup-fönster i kod som körs som ett direkt resultat av en användaråtgärd (till exempel i en händelsehanterare för en musklicknings- eller tangenttryckningshändelse).
Från ActionScript kan du göra följande på HTML-sidan:
- Anropa en JavaScript-funktion.
- Skicka obegränsat antal argument, oavsett namn.
- Skicka olika datatyper (Boolean, Number, String m.fl.).
- Ta emot ett returvärde från JavaScript-funktionen.
Från JavaScript på HTML-sidan kan du:
- Anropa en ActionScript-funktion.
- Skicka argument med standardfunktionen anropsnotation.
- Returnera ett värde till JavaScript-funktionen.
Att observera för Flash Player-program: Flash Player har för närvarande inte stöd för SWF-filer som är inbäddade i HTML-formulär.
Att observera för AIR-program: I Adobe AIR kan klassen ExternalInterface används för kommunikation mellan JavaScript i en HTML-sida som lästs in i HTMLLoader-kontrollen och ActionScript i SWF-innehåll som bäddats in i HTML-sidan.
Fler exempel
Accessing Flex from JavaScript
About ExternalInterface API security in Flex
Relaterade API-element
Egenskap | Definieras med | ||
---|---|---|---|
available : Boolean [statisk] [skrivskyddad]
Anger om spelaren är i en behållare som har ett externt gränssnitt. | ExternalInterface | ||
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
marshallExceptions : Boolean = false [statisk]
Anger om det externa gränssnittet ska försöka skicka ActionScript-undantag till webbläsaren och JavaScript-undantag till spelaren. | ExternalInterface | ||
objectID : String [statisk] [skrivskyddad]
Returnerar object-taggens id-attribut i Internet Explorer, eller embed-taggens namnattribut i Netscape. | ExternalInterface |
Metod | Definieras med | ||
---|---|---|---|
[statisk]
Registrerar en ActionScript-metod som anropbar från behållaren. | ExternalInterface | ||
[statisk]
Anropar en funktion som visas av SWF-behållaren och skickar noll eller fler argument. | ExternalInterface | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object |
available | egenskap |
available:Boolean
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Anger om spelaren är i en behållare som har ett externt gränssnitt. Om det externa gränssnittet är tillgängligt är egenskapen true
. Annars är den false
.
Obs: När du använder det externa programmeringsgränssnittet med HTML måste du alltid kontrollera att HTML-koden har lästs in helt innan du försöker anropa JavaScript-metoder.
Implementering
public static function get available():Boolean
Exempel ( Så här använder du exemplet )
available
för att avgöra om spelaren är i en behållare som har ett externt gränssnitt.
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 | egenskap |
public static var marshallExceptions:Boolean = false
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9.0.115.0, Flash Lite 4 |
Anger om det externa gränssnittet ska försöka skicka ActionScript-undantag till webbläsaren och JavaScript-undantag till spelaren. Du måste ställa in den här egenskapen på true
explicit för att kunna hantera JavaScript-undantag i ActionScript och för att kunna hantera ActionScript-undantag i JavaScript.
Relaterade API-element
Exempel ( Så här använder du exemplet )
addCallback()
. Den nya funktionen gör ett undantag så att JavaScript-koden som körs i webbläsaren kan fånga det. Exemplet innehåller också en try..catch
-sats som hanterar eventuella undantag som webbläsaren gör när funktionen throwit()
anropas.
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 | egenskap |
addCallback | () | metod |
public static function addCallback(functionName:String, closure:Function):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Registrerar en ActionScript-metod som anropbar från behållaren. Efter en lyckad aktivering av addCallBack()
kan den registrerade funktionen i spelaren anropas med JavaScript- eller ActiveX-kod i behållaren.
Obs! För local-innehåll som körs i en webbläsare fungerar bara anrop till ExternalInterface.addCallback()
-metoden om SWF-filen och innehållswebbsidan finns i säkerhetssandlådan lokal-tillförlitlig. Mer information finns i avsnittet Security på Flash Player Developer Center.
Parametrar
functionName:String — Det namn behållaren kan anropa funktionen med.
| |
closure:Function — Den funktionsstängning som ska anropas. Det kan vara en fristående funktion, eller en metodstängning som ger referens till en metod för en objektinstans. Genom att skicka en metodstängning kan återkopplingen riktas mot en metod i en viss objektinstans.
Obs! Om |
Utlöser
Error — Den här behållaren har inte stöd för inkommande anrop. Inkommande anrop stöds bara i Internet Explorer för Windows och av webbläsare som använder NPRuntime-programmeringsgränssnitt, som Mozilla 1.7.5 och senare eller Firefox 1.0 och senare.
| |
SecurityError — En återkoppling med det angivna namnet har redan lagts till av ActionScript i en sandlåda som du inte har tillgång till. Du kan alltså inte åsidosätta den återkopplingen. Du kan arbeta runt den genom att skriva om det ActionScript som ursprungligen anropade addCallback() -metoden så att det också anropar Security.allowDomain() -metoden.
| |
SecurityError — Behållarmiljön tillhör en säkerhetssandlåda som den anropande koden inte har tillgång till. Åtgärda problemet genom att följa stegen nedan:
|
Relaterade API-element
call | () | metod |
public static function call(functionName:String, ... arguments):*
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Anropar en funktion som visas av SWF-behållaren och skickar noll eller fler argument. Om funktionen inte är tillgänglig returneras null
. Annars returneras värdet som ges av funktionen. Rekursioner är inte tillåtna i Opera- eller Netscape-webbläsare. Ett rekursivt anrop ger ett null
-svar. (Rekursion stöds i Internet Explorer- och Firefox-webbläsare.)
Om behållaren är en HTML-sida aktiverar metoden en JavaScript-funktion i ett script
-element.
Om behållaren är en annan ActiveX-behållare skickar metoden en FlashCall ActiveX-händelse med det angivna namnet och behållaren bearbetar händelsen.
Om behållaren innehåller Netscape-pluginen kan du antingen skriva anpassat stöd för det nya NPRuntime-gränssnittet eller bädda in en HTML-kontroll och bädda in spelaren i HTML-kontrollen. Om du bäddar in HTML-kontrollen kan du kommunicera med spelaren via ett JavaScript-gränssnitt till behållarprogrammet.
Obs! För local-innehåll som körs i en webbläsare tillåts bara anrop till ExternalInterface.call()
-metoden om SWF-filen och innehållswebbsidan (om sådan finns) finns i säkerhetssandlådan lokal-tillförlitlig. Du kan förhindra att en SWF-fil använder denna metod genom inställningen av parametern allowNetworking
för taggarna object
och embed
på HTML-sidan med SWF-innehållet. Mer information finns i avsnittet Security på Flash Player Developer Center.
Att observera för Flash Player-program I Flash Player 10 och Flash Player 9 uppdatering 5 begränsas den här metoden i vissa webbläsare om blockering av popup-fönster har aktiverats. Då kan du bara anropa den här metoden som ett svar på en användarhändelse (i till exempel en händelsehanterare för en musklickning eller en tangentbordstryckningshändelse).
Parametrar
functionName:String — Det alfanumeriska namnet på funktionen som ska anropas i behållaren. Att använda ett icke-alfanumeriskt funktionsnamn genererar ett körningsfel (fel 2155). Du kan använda ett try..catch -block för att hantera felet.
| |
... arguments — De argument som ska skickas till funktionen i behållaren. Du kan ange noll eller flera parametrar avgränsade med komma. De kan vara av vilken ActionScript-datatyp som helst. När anropet är till en JavaScript-funktion konverteras ActionScript-typerna automatiskt till JavaScript-typer. När anropet är till en annan ActiveX-behållare kodas parametrarna i meddelandet med begäran.
|
* — Svaret som tas emot från behållaren. Om anropet misslyckas – till exempel om det inte finns någon sådan funktion i behållaren, om gränssnittet inte var tillgängligt, om en rekursion gjordes (med en Netscape- eller Opera-webbläsare) eller om det uppstod ett säkerhetsproblem – returneras null och ett fel orsakas.
|
Utlöser
Error — Den här behållaren har inte stöd för utgående anrop. Utgående anrop stöds bara i Internet Explorer för Windows och av webbläsare som använder NPRuntime-programmeringsgränssnitt, som Mozilla 1.7.5 och senare eller Firefox 1.0 och senare.
| |
SecurityError — Behållarmiljön tillhör en säkerhetssandlåda som den anropande koden inte har tillgång till. Åtgärda problemet genom att följa stegen nedan:
|
Exempel ( Så här använder du exemplet )
// // 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); }
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); } } } }
<!-- 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>
Tue Jun 12 2018, 01:40 PM Z