Question

J'essaie d'éditer du flash pour effectuer un appel de fonction javascript externe, mais sans succès. Voici mon code ActionScript 2.0:

//testing external .js calls

import flash.external.ExternalInterface;

//attempting to make external js call

ExternalInterface.call("createPlaylist","It's my Life!");

et voici mon javascript;

function createPlaylist(mess){
  alert("called createPlaylist: " + mess);
}

J'ai vu beaucoup d'exemples et l'utilisation de ExternalInterface.addCallback me laisse perplexe. Je n'ai pas besoin du javascript pour renvoyer quoi que ce soit en flash, est-ce nécessaire?

Pour une raison quelconque, je ne vois jamais l'alerte. Est-ce que quelqu'un voit des problèmes dans mon code? Existe-t-il une bibliothèque ExternalInterface que je n'ai pas? Aussi, quel est le MEILLEUR moyen d'utiliser ExternalInterface (c.-à-d. Vérification des erreurs, etc.) Merci d'avance ...

Était-ce utile?

La solution

ExternalInterface.addCallback permet à javascript d'appeler dans votre application Flash. Si, par exemple, vous voulez un bouton HTML qui démarre / arrête une vidéo, vous ajoutez simplement un rappel pour une méthode nommée et votre js peut ensuite appeler la méthode [FlashObject] .callback.

Je dirais que le meilleur moyen d'ajouter des méthodes ExternalInterface dans votre application est de configurer une classe responsable de la communication JS pour chaque cas d'interaction de l'application. Par exemple:

public class ExternalVideoControl {

    private var video:MediaDisplay;

    public function ExternalVideoControl(video:MediaDisplay) {
        //ExternalInterface.addCallback  - one callback for each method you want to expose, pointing to a method within this class;
        //add listeners on the video player and point them to methods in this class, for example onProgress
    }
    public function playVideo():void {
        //play the video on the mediaDisplay
    }
    private function onProgress(event:ProgressEvent):void {
        //ExternalInterface.call - report progress back to javascript
    }
}

Pour tester ExternalInterface plus directement, essayez d'appeler

ExternalInterface.call("alert", "Hello World!");

Autres conseils

Comme d'autres l'ont dit dans les commentaires de Johan, vous devez d'abord vérifier si l'interface externe est disponible en cochant ExternalInterface.available.

Autre que cela ... comment lancez-vous l'application Flex? Tout d'abord, il doit être inclus dans un wrapper contenant ce code JavaScript, bien sûr. C'est trivial. Toutefois, si vous le lancez sous forme de fichier à partir du système de fichiers local (l'URL du navigateur commence par fichier: //), vous devez également vous assurer que le fichier SWF dispose des autorisations requises pour exécuter une fonction JavaScript.

Vous devez faire confiance au fichier SWF pour pouvoir accéder aux ressources locales telles que des fichiers ou JS sur des fichiers locaux. Pour ce faire, créez un fichier tel que myapp.cfg et ajoutez le chemin d'accès à votre fichier sous la forme d'une ligne unique à cette ligne. Placez ce fichier dans le dossier FlashPLayerTrust. Sur les systèmes Linux, il s'agit de ~ / .macromedia / Flash_Player / # Security / FlashPlayerTrust /.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top