gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:16:24 26 4
gpt4 key购买 nike

所以我在 AIR 中创建了一个 Application Sandbox HTMLLoader 对象只是想调用ActionScript来自 JavaScript 的方法.在 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 片段,它试图调用在我的主类中声明的公共(public)方法 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();
}

我错过了什么?

最佳答案

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

无论如何,答案:

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

_html.window.as3Function = Main.as3Function;

现在在 JavaScript 中我可以将 as3Function 调用为:

<script>
window.as3Function();
</script>

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

关于actionscript - 如何从 AIR 中的 JavaScript (HTMLLoader) 对象调用 ActionScript 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/448441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com