在Adobe AIR项目中,加载本地SWF后,可以通过getDefinitionByName
或更可靠的方式获取其中的类。以下是具体实现步骤:
实现步骤:
- 设置LoaderContext:加载时指定应用程序域,确保类定义可访问。
- 加载SWF文件:使用Loader加载本地SWF,注意路径协议(如
app:/
或file://
)。 - 监听加载完成事件:在事件处理中获取SWF的应用程序域。
- 获取类定义:通过ApplicationDomain的
getDefinition
方法或getDefinitionByName
获取类。
在Adobe AIR项目中,加载本地SWF后,可以通过getDefinitionByName
或更可靠的方式获取其中的类。以下是具体实现步骤:
实现步骤:
- 设置LoaderContext:加载时指定应用程序域,确保类定义可访问。
- 加载SWF文件:使用Loader加载本地SWF,注意路径协议(如
app:/
或file://
)。 - 监听加载完成事件:在事件处理中获取SWF的应用程序域。
- 获取类定义:通过ApplicationDomain的
getDefinition
方法或getDefinitionByName
获取类。
示例代码:
1 | private var loader:Loader = new Loader(); |
关键点:
• 应用程序域设置:使用ApplicationDomain.currentDomain
将SWF类合并到当前域,便于访问。若担心命名冲突,可创建子域new ApplicationDomain(ApplicationDomain.currentDomain)
,但需从子域中获取类。
• 类导出:确保SWF中的目标类已导出(如Flash中设置“导出到帧”),避免被编译器优化。
• 完全限定名:使用类的完整包路径(如com.example.MyClass
)。
• 异常处理:捕获可能的错误,如类不存在或访问权限问题。
注意事项:
• AIR权限:加载本地文件时,路径需正确(如使用app:/
访问应用目录)。
• 安全沙箱:确保跨沙箱访问权限,本地SWF通常无此问题。
• LoaderContext配置:在AIR中可能需要allowLoadBytesCodeExecution = true
以允许执行加载的代码。
通过以上步骤,即可在加载完成后获取并实例化SWF中的类。推荐使用ApplicationDomain.getDefinition()
方法,直接通过加载的应用程序域获取类定义,避免全局域污染和潜在冲突。