2017-07-19 98 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 

} 

使用ExternalInterface的,但我得到这个错误: 错误:错误#2067:ExternalInterface的是不是在这个容器中使用。 ExternalInterface需要Internet Explorer ActiveX,Firefox,Mozilla 1.7.5或更高版本,或其他支持NPRuntime的浏览器。AS3空气桌面上的HTMLLoader

我做错了什么?

+1

** **的ExternalInterface与沟通环境,对于当前的Flash内容,这完全是** external **:包含Flash影片的网页,运行Flash内容的应用程序等等。 ** HTMLLoader **是一个**内部**对象,而不是外部环境。 – Organis

+1

它在这种情况下也使用,如本文所述https://stackoverflow.com/questions/35956597/how-do-i-communicate-between-js-and-as3-in-an-air-android-application Dodger Thud评论并提到http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html,但Adobe已封锁irans ips,然后我无法访问文档 –

+1

在Adobe AIR ,可以使用ExternalInterface类在HTMLLoader控件中加载的HTML页面中的JavaScript与HTML页面中嵌入的SWF内容中的ActionScript之间进行通信。 –

回答

0

您不能在AS3主机和子女HTMLLoader之间使用ExternalInterfaceHTMLLoader。您可以将其与嵌入在HTMLLoader中加载的HTML内容中的子SWF一起使用。尽管如此,情况并非如此。

你能做什么,就是访问HTMLLoader的javascript window对象来进行二者之间的交互。

_htmlLoader.window.games(); 

假设的JavaScript games()方法是在全球范围内(窗口):

所以在你的AS3代码,代之以ExternalInterface的线。

以同样的方式,你可以设置窗口对象的引用的AS3功能:

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

_htmlLoader.window.flashFunction = flashFunction; 

然后在您的html:

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