【问题标题】:AS3 - LocalConnection between AIR master & SWF senderAS3 - AIR 主机和 SWF 发送器之间的 LocalConnection
【发布时间】:2019-02-22 05:27:05
【问题描述】:

我无法在为 AIR 设置的主文件和为 FlashPlayer(常规 SWF)设置的从属文件之间使用本地连接。 下面是两个测试文件的代码...

主/接收文件:

// test-AIR.fla
import flash.display.Loader;
var loadK1:Loader=new Loader();
loadK1.load(new URLRequest("K1/test-SWF.swf"));
addChild(loadK1);
var localConnection:LocalConnection = new LocalConnection();
localConnection.allowDomain("*");
localConnection.client = this;
localConnection.connect("_connectionName");
function onMethod(timeString:String):void {
    trace("onMethod called at: " + timeString);
    }

发件人...

// K1/test-SWF.fla
var localConnection:LocalConnection = new LocalConnection();
localConnection.send("_connectionName", "onMethod");
trace("END of test-SWF.swf");

然后,这是显示未调用 onMethod 的输出:

[SWF] test-AIR.swf - 解压后1170字节

K1/test-SWF.swf - 解压后625字节

测试结束-SWF.swf[SWF]

我觉得我什么都试过了。有人能指出什么是错的或我错过了什么吗? 谢谢,

【问题讨论】:

  • 一些疯狂的猜测。 1. 您设置 LocalConnection 之后加载外部 SWF。谁知道呢,也许它在你连接接收器之前就加载并执行了。 2. 为所有可能的事件注册所有 LC 并跟踪它们。可能会给你一个提示。 3. 我认为onMethod 方法必须是public。 4. 首先在一个 SWF 中尝试它并确保它有效。 5. 阅读官方文档,有很多细微差别:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
  • 谢谢,我尝试了一切,但没有成功。恐怕这是由于移动设备配置文件不支持 LocalConnection :help.adobe.com/en_US/air/build/… 我正在寻找解决方法。提示将不胜感激!
  • 为什么需要 LC 在单个应用程序实例中进行通信?
  • 这是一个最初为网络浏览器设计的大型应用程序。使用多个文件可以加快加载速度。它总共有 10 多个 FLA/SWF 文件。现在,我正在尝试将其移植到移动和桌面设备。
  • 看看Flex ModuleLoader。根据您的架构,这可能是一种选择。

标签: android actionscript-3 flash air localconnection


【解决方案1】:

由于两个 SWF 位于同一个 SecurityDomain 中,因此它们可以不受限制地访问彼此的显示列表。因此,我通过显示列表层次结构调用方法解决了这个问题:

MovieClip(this.parent.parent).onMethod();

这样,无论发布目标是什么(浏览器、桌面、移动设备...),都可以从子应用调用该方法。

@Organis 感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多