当前位置:  开发笔记 > 编程语言 > 正文

如何从AIR中的JavaScript(HTMLLoader)对象调用ActionScript方法?

如何解决《如何从AIR中的JavaScript(HTMLLoader)对象调用ActionScript方法?》经验,为你挑选了1个好方法。

所以我有一个Application Sandbox HTMLLoader对象,我在AIR中创建它只是想从JavaScript调用ActionScript方法.在Flash中,这是通过我们可靠的ExternalInterface.addCallback()函数实现的.然而在AIR中,事情有点不同,我似乎无法让它发挥作用.

以下是我项目的简要概述:

我的AIR(ActionScript)主要:

public class Main extends Sprite {

    public var _as3Var:String = "testing";
    public function as3Function():void
    {
        trace("as3Function called from Javascript");
    }

    public function Main() {
        NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);
    }

    protected function onInvoke(e:InvokeEvent):void {
        NativeApplication.nativeApplication.removeEventListener(InvokeEvent.INVOKE, onInvoke );
        var app = new App();
        addChild(app);
        app.init(new ExternalContainer(), e.currentDirectory, e.arguments);
    }
}

这就是我创建HTMLLoader对象的方法:

{
    _html = new HTMLLoader();
    _html.useCache = false;
    _html.runtimeApplicationDomain = ApplicationDomain.currentDomain;
    _html.load(new URLRequest("sandbox/AirRoot.html"));
    _html.width = 800;
    _html.height = 600;
    App.ref.addChild(_html);
}

最后,这是我的AirRoot.html文件中的JavaScript片段,它试图调用我的Main类中声明的公共方法as3Function():

Exposed.testAs3 = function()
{
    air.trace("Exposed.testAs3 called");            /* This works fine. */
    air.trace("runtimeVersion:");                   /* This works fine. */
    air.trace(air.NativeApplication.nativeApplication.runtimeVersion);  /* This works fine. */
    air.trace("seeing if I can get to AS3 params...");  /* This works fine. */

    /* This doesn't work - get the following error: TypeError: Value undefined does not allow function calls. */
    air.NativeApplication.nativeApplication.as3Function();
}

我错过了什么?



1> helifreak..:

好的,我将回答我自己的问题.我保证这不是一个获得更多声望点的策略,但我今天感到非常困惑,但现在已经找到了合适的答案和文档 - 这通常是许多工程师问题的主要问题......

无论如何,答案是:

AIR HTMLLoader对象包含一个魔术属性,HTMLLoader.window它是JavaScript窗口对象的代理.因此设置HTMLLoader.window = AS3Function;是一种方式 - 或者与我之前包含的示例有关(假设我设置了一个名为Main的静态属性,它指向Main类):

_html.window.as3Function = Main.as3Function;

现在在JavaScript中,我可以称之为as3Function:


另一个有趣的属性是JavaScript"window.htmlLoader"对象.它是AS3 HTMLLoader父对象的代理,在我的例子中是_html对象.通过此,您可以从JavaScript访问与_html对象相关的内容.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有