2017-07-19 1 views
2
import flash.html.HTMLLoader; 
import flash.events.Event; 
import flash.external.ExternalInterface; 


var _htmlLoader: HTMLLoader=new HTMLLoader() ; 
_htmlLoader.runtimeApplicationDomain = ApplicationDomain.currentDomain; 
_htmlLoader.load(new URLRequest("http://knights-honor.com/index.php")); 
_htmlLoader.addEventListener(Event.COMPLETE, onComplete); 

function onComplete(ev: Event) { 

    _htmlLoader.width = stage.width; 
    _htmlLoader.height = stage.height; 
    this.addChild(_htmlLoader); 
    ExternalInterface.call("games()");//to call the games function from javascript wittin htmlloader 

} 

mais je reçois cette erreur: Erreur: Erreur # 2067: Le ExternalInterface n'est pas disponible dans ce conteneur. ExternalInterface requiert Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 et supérieur, ou d'autres navigateurs prenant en charge NPRuntime.AS3 Air pour Desktop à l'aide ExternalInterface sur htmlLoader

qu'est-ce que je fais mal?

+1

** ExternalInterface ** est de communiquer avec environnement, qui est exactement ** externe ** pour le contenu Flash actuel: une page Web contenant l'animation Flash, une application qui exécute le contenu Flash, etc. ** HTMLLoader ** est un objet ** interne **, pas l'environnement externe. – Organis

+1

il est utilisé dans ce cas aussi comme mentionné dans ce post https://stackoverflow.com/questions/35956597/how-do-i-communicate-between-js-and-as3-in-an-air-android-application commenté par Dodger Thud et référé à http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html mais adobe a bloqué irans ips alors je ne peux pas accéder à la documentation –

+1

Dans Adobe AIR , la classe ExternalInterface peut être utilisée pour communiquer entre JavaScript dans une page HTML chargée dans le contrôle HTMLLoader et ActionScript dans le contenu SWF incorporé dans cette page HTML. –

Répondre

0

Vous ne pouvez pas utiliser ExternalInterface avec HTMLLoader entre l'hôte AS3 et un enfant HTMLLoader. Vous pouvez l'utiliser avec un fichier SWF intégré dans un contenu HTML chargé dans un HTMLLoader. Ce n'est pas le cas ici.

Ce que vous pouvez faire, c'est d'accéder à l'objet javascript window de HTMLLoader pour interagir entre les deux.

Donc, dans votre code AS3, remplacez la ligne ExternalInterface avec:

_htmlLoader.window.games(); 

En supposant que le javascript méthode games() est dans la portée globale (fenêtre).

De la même manière, vous pouvez définir une référence à une fonction AS3 sur l'objet de la fenêtre:

function flashFunction():void { 
    trace("Flash Function Called"); 
} 

_htmlLoader.window.flashFunction = flashFunction; 

Puis dans votre code html:

<button onclick="flashFunction()">Run Flash Function</button>