| Package | flash.external |
| Classe | public final class ExternalInterface |
| Héritage | ExternalInterface Object |
| Version du langage : | ActionScript 3.0 |
| Version du lecteur : | Flash Player 9 |
Vous pouvez appeler une fonction ActionScript dans Flash Player, à l'aide de JavaScript dans la page HTML. La fonction ActionScript peut renvoyer une valeur que JavaScript reçoit immédiatement comme valeur de renvoi de l'appel.
Cette fonctionnalité remplace la méthode fscommand().
Utilisez la classe ExternalInterface pour les combinaisons suivantes de navigateurs et de systèmes d'exploitation :
| Navigateur | Système d'exploitation | Système d'exploitation |
|---|---|---|
| Internet Explorer 5.0 et versions ultérieures | Windows | |
| Netscape 8.0 et versions ultérieures | Windows | MacOS |
| Mozilla 1.7.5 et versions ultérieures | Windows | MacOS |
| Firefox 1.0 et versions ultérieures | Windows | MacOS |
| Safari 1.3 et versions ultérieures | MacOS |
Flash Player pour Linux version 9.0.31.0 et supérieure prend en charge la classe ExternalInterface dans les navigateurs suivants :
| Navigateur |
|---|
| Mozilla 1.7.x et supérieure |
| Firefox 1.5.0.7 et versions ultérieures |
| SeaMonkey 1.0.5 et supérieure |
La classe ExternalInterface nécessite la prise en charge, par le navigateur Web de l'utilisateur, d'ActiveX ou de l'API NPRuntime qui est exposée par certains navigateurs pour les scripts de plug-ins. Même si une combinaison navigateur/système d'exploitation n'apparaît pas dans la liste ci-dessus, elle devrait prendre en charge la classe ExternalInterface si elle gère l'API NPRuntime. Visitez le site http://www.mozilla.org/projects/plugins/npruntime.html.
Remarque : lors de l'incorporation de fichiers SWF à une page HTML, vérifiez que les attributs id et name des balises object et embed ne comportent aucun des caractères suivants :
. - + * / \
A partir d'ActionScript, vous pouvez effectuer les opérations suivantes sur la page HTML :
A partir de JavaScript, vous pouvez effectuer les opérations suivantes sur la page HTML :
Flash Player ne gère actuellement pas les fichiers SWF intégrés à des formulaires HTML.
Voir aussi
| Propriété | Défini par | ||
|---|---|---|---|
| available : Boolean
[static] [lecture-seule]
Indique si ce lecteur se trouve dans un conteneur doté d'une interface externe.
| ExternalInterface | ||
![]() | constructor : Object
Référence à l'objet de classe ou à la fonction constructeur d'une occurrence donnée d'un objet.
| Object | |
| marshallExceptions : Boolean = false [static]
Indique si l'interface externe doit tenter de transmettre des exceptions ActionScript au navigateur en cours et des exceptions JavaScript à Flash Player.
| ExternalInterface | ||
| objectID : String
[static] [lecture-seule]
Renvoie l’attribut id de la balise object dans Internet Explorer, ou l’attribut name de la balise embed dans Netscape.
| ExternalInterface | ||
![]() | prototype : Object
[static]
Référence à l’objet prototype d’un objet de classe ou fonction.
| Object | |
| Méthode | Défini par | ||
|---|---|---|---|
|
[static]
Enregistre une méthode ActionScript comme pouvant être appelée à partir du conteneur.
| ExternalInterface | ||
|
[static]
Appelle une fonction présentée par le conteneur Flash Player en transmettant la valeur zéro ou d'autres arguments.
| ExternalInterface | ||
![]() |
Indique si la propriété spécifiée d'un objet est définie.
| Object | |
![]() |
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l'objet spécifié en tant que paramètre.
| Object | |
![]() |
Indique si la propriété spécifiée existe et est énumérable.
| Object | |
![]() |
Définit la disponibilité d'une propriété dynamique pour les opérations en boucle.
| Object | |
![]() |
Renvoie la représentation sous forme de chaîne de l'objet spécifié.
| Object | |
![]() |
Renvoie la valeur primitive de l'objet spécifié.
| Object | |
| available | propriété |
available:Boolean [lecture-seule]
| Version du langage : | ActionScript 3.0 |
| Version du lecteur : | Flash Player 9 |
Indique si ce lecteur se trouve dans un conteneur doté d'une interface externe. Si l'interface externe est disponible, cette propriété est true ; sinon, elle est false.
Remarque : si vous utilisez l’API External avec HTML, assurez-vous toujours que le chargement du code HTML est terminé avant de tenter d’appeler toute méthode JavaScript.
public static function get available():Boolean
Voir aussi
available pour déterminer si le lecteur se trouve dans un conteneur doté d'une interface externe.
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 | propriété |
public static var marshallExceptions:Boolean = false
| Version du langage : | ActionScript 3.0 |
Indique si l'interface externe doit tenter de transmettre des exceptions ActionScript au navigateur en cours et des exceptions JavaScript à Flash Player. Vous devez définir explicitement cette propriété sur true pour récupérer les exceptions JavaScript dans ActionScript et les exceptions ActionScript dans JavaScript.
Version du lecteur : Flash Player 9 Mise à jour 3.
Voir aussi
addCallback(). La nouvelle fonction émet une exception afin que le code JavaScript qui s'exécute dans le navigateur puisse la récupérer. Cet exemple contient également une instruction try..catch pour récupérer toutes les exceptions émises par le navigateur lors de l'appel de la fonction throwit().
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 | propriété |
objectID:String [lecture-seule]
| Version du langage : | ActionScript 3.0 |
| Version du lecteur : | Flash Player 9 |
Renvoie l’attribut id de la balise object dans Internet Explorer, ou l’attribut name de la balise embed dans Netscape.
public static function get objectID():String
Voir aussi
| addCallback | () | méthode |
public static function addCallback(functionName:String, closure:Function):void
| Version du langage : | ActionScript 3.0 |
| Version du lecteur : | Flash Player 9 |
Enregistre une méthode ActionScript comme pouvant être appelée à partir du conteneur. Lorsque l'invocation de addCallBack() a réussi, la fonction enregistrée dans Flash Player peut être appelée par le code JavaScript ou ActiveX dans le conteneur.
Remarque : pour le contenu local s'exécutant dans un navigateur, les appels à la méthode ExternalInterface.addCallback() fonctionneront uniquement si le fichier SWF et la page web le contenant se trouvent dans le sandbox de sécurité approuvé en local. Pour plus d'informations, consultez les références suivantes :
Paramètres
functionName:String — Nom utilisé par le conteneur pour appeler la fonction.
|
|
closure:Function — La fermeture de fonction à appeler. Il peut s’agir d’une fonction autonome ou d’une méthode de fermeture qui référence une méthode d'occurrence d'objet. En transmettant une fermeture de méthode, vous pouvez dirigez le rappel vers une méthode d'une occurrence d'un objet particulier.
|
Error — Le conteneur ne prend pas en charge les appels entrants. Les appels entrants ne sont gérés que dans Internet Explorer pour Windows et les navigateurs qui utilisent l’API NPRuntime, tels que Mozilla 1.7.5 et versions ultérieures, ou Firefox 1.0 et versions ultérieures.
|
|
SecurityError — Un rappel avec le nom spécifié a déjà été ajouté par ActionScript dans un sandbox auquel vous n’avez pas accès. Il vous est impossible de le remplacer. Pour contourner ce problème, réécrivez le code ActionScript qui appelait au départ la méthode addCallback() de sorte qu'il appelle également la méthode Security.allowDomain().
|
|
SecurityError — L’environnement conteneur appartient à un sandbox de sécurité auquel le code effectuant l'appel n'a pas accès. Pour résoudre ce problème, exécutez la procédure suivante :
|
Voir aussi
| call | () | méthode |
public static function call(functionName:String, ... arguments):*
| Version du langage : | ActionScript 3.0 |
| Version du lecteur : | Flash Player 9 |
Appelle une fonction présentée par le conteneur Flash Player en transmettant la valeur zéro ou d'autres arguments. Si la fonction n'est pas disponible, l'appel renvoie null ; sinon, elle renvoie la valeur fournie par la fonction. La récursion n'est pas autorisée dans les navigateurs Opera et Netscape. Dans ces derniers, un appel récursif produit une réponse null. (La récursion est prise en charge par les navigateurs Internet Explorer et Firefox.)
Si le conteneur correspond à une page HTML, cette méthode appelle une fonction JavaScript dans un élément script.
Si le conteneur est un autre conteneur de type ActiveX, cette méthode distribue l’événement FlashCall ActiveX au nom spécifié ; le conteneur traite alors l'événement.
Si le conteneur renferme le plug-in Netscape, vous pouvez soit écrire le support personnalisé pour la nouvelle interface NPRuntime, soit intégrer un contrôle HTML et intégrer Flash Player au contrôle HTML. Si vous intégrez un contrôle HTML, vous pouvez communiquer avec Flash Player via une interface JavaScript qui dialogue avec l'application conteneur native.
Remarque : pour du contenu local s'exécutant dans un navigateur, les appels à la méthode ExternalInterface.call() ne sont autorisés que si le fichier SWF et la page Web qui le contient (le cas échéant) se trouvent dans le sandbox de sécurité local approuvé. Vous pouvez également empêcher un fichier SWF d'utiliser cette méthode en définissant le paramètre allowNetworking des balises object et embed dans la page HTML qui stocke le contenu SWF. Pour plus d'informations, consultez les références suivantes :
Paramètres
functionName:String — Nom alphanumérique de la fonction à appeler dans le conteneur.
|
|
... arguments — Arguments à transmettre à la fonction dans le conteneur. Vous pouvez ne spécifier aucun paramètre ou en spécifier plusieurs en les séparant par des virgules. Ces paramètres peuvent être de tout type de donnée ActionScript. Si vous faites appel à une fonction JavaScript, les types ActionScript sont automatiquement convertis en types JavaScript. Si l’appel s'adresse à un autre conteneur ActiveX, les paramètres sont encodés dans le message de requête.
|
* — Réponse émanant du conteneur. Si l'appel a échoué (imaginons que cette fonction ne figure pas dans le conteneur, qu'un problème de sécurité soit survenu, que l'interface n'est pas disponible ou encore qu'une erreur de récursivité s'est produite avec un navigateur Netscape ou Opera), la valeur null est renvoyée et une erreur est signalée.
|
Error — Le conteneur ne prend pas en charge les appels sortants. Les appels sortants ne sont gérés que dans Internet Explorer pour Windows et les navigateurs qui utilisent l’API NPRuntime, tels que Mozilla 1.7.5 et versions ultérieures, ou Firefox 1.0 et versions ultérieures.
|
|
SecurityError — L’environnement conteneur appartient à un sandbox de sécurité auquel le code effectuant l'appel n'a pas accès. Pour résoudre ce problème, exécutez la procédure suivante :
|
Voir aussi
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;
public class ExternalInterfaceExample extends Sprite {
private var input:TextField;
private var output:TextField;
private var sendBtn:Sprite;
public function ExternalInterfaceExample() {
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");
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 thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
function sendToActionScript(value) {
thisMovie("ExternalInterfaceExample").sendToActionScript(value);
}
function sendToJavaScript(value) {
document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
}
</script>
</head>
<body onload="pageInit();">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="ExternalInterfaceExample" width="500" height="375"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="movie" value="ExternalInterfaceExample.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"
width="500" height="375" name="ExternalInterfaceExample" align="middle"
play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</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>
M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire
Page en cours: http://livedocs.adobe.com/flash/9.0_fr/ActionScriptLangRefV3/flash/external/ExternalInterface.html