Utilizzo di ExternalInterface in Flash
-
03-07-2019 - |
Domanda
Sto cercando di modificare alcuni flash per effettuare una chiamata esterna alla funzione javascript, ma senza successo. Ecco il mio codice actionscript 2.0:
//testing external .js calls
import flash.external.ExternalInterface;
//attempting to make external js call
ExternalInterface.call("createPlaylist","It's my Life!");
ed ecco il mio javascript;
function createPlaylist(mess){
alert("called createPlaylist: " + mess);
}
Ho visto molti esempi e sono principalmente confuso sull'uso di ExternalInterface.addCallback
. Non ho bisogno del javascript per restituire nulla in flash, quindi è necessario?
Per qualsiasi motivo, non vedo mai l'avviso. Qualcuno vede qualche problema nel mio codice? Esiste una libreria ExternalInterface
che non ho? Inoltre, qual è il modo MIGLIORE per usare ExternalInterface
(ad es. Controllo degli errori, ecc.) Grazie in anticipo ...
Soluzione
ExternalInterface.addCallback è per javascript per poter chiamare nell'applicazione Flash. Se, ad esempio, vuoi un pulsante HTML che avvia / arresta un video, aggiungi semplicemente una richiamata per un metodo denominato e il tuo js può quindi chiamare [FlashObject] .callback nome metodo.
Direi che il modo migliore per aggiungere metodi ExternalInterface nella tua applicazione è impostare una classe responsabile della comunicazione JS per ogni caso di interazione nell'app. Ad esempio:
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
}
}
Per testare ExternalInterface in modo più diretto, prova a chiamare
ExternalInterface.call("alert", "Hello World!");
Altri suggerimenti
Come altri hanno detto nei commenti al post di Johan, dovresti prima verificare se l'interfaccia esterna è disponibile controllando ExternalInterface.available.
A parte questo ... come si avvia l'applicazione Flex? Innanzitutto deve essere incluso in un wrapper che contenga questo JavaScript ovviamente. È banale. Tuttavia, nel caso in cui lo avvii come file dal filesystem locale (l'URL del browser inizia con il file: //), devi anche assicurarti che il file SWF disponga delle autorizzazioni necessarie per eseguire una funzione JavaScript.
Devi fidarti del file SWF per renderlo in grado di accedere a risorse locali come file o JS su file locali. Per fare ciò, crea un file come myapp.cfg e aggiungi il percorso al tuo file come una singola riga a questa riga. Inserire questo file nella cartella FlashPLayerTrust. Sui sistemi Linux questo è ~ / .macromedia / Flash_Player / # Security / FlashPlayerTrust /.