Appearance
前端 JavaScript API
概述
Eagle2Ae AE 扩展提供了丰富的前端 JavaScript API,允许开发者与扩展的核心功能进行交互。这些 API 涵盖了连接管理、项目状态检测、配置管理、日志记录等多个方面。
主应用类 (AEExtension)
构造函数
javascript
/**
* AE扩展主类构造函数
* 负责初始化所有核心组件和服务
*/
class AEExtension {
/**
* 构造函数
* @param {Object} options - 初始化选项
*/
constructor(options = {})属性:
csInterface: CSInterface实例,用于与ExtendScript通信connectionState: 当前连接状态 (ConnectionState枚举)pollingManager: HTTP轮询管理器实例connectionMonitor: 连接质量监控器实例logManager: 日志管理器实例settingsManager: 设置管理器实例fileHandler: 文件处理器实例soundPlayer: 音效播放器实例projectStatusChecker: 项目状态检测器实例 (v2.4.0新增)configManager: 配置管理器实例 (v2.4.0新增)portDiscovery: 端口发现服务实例 (v2.4.0新增)
核心方法
asyncInit()
异步初始化方法
javascript
/**
* 异步初始化应用程序
* 分离同步和异步初始化任务,避免阻塞构造函数
* @returns {Promise<void>} 初始化完成的 Promise
* @throws {Error} 初始化失败时抛出错误
*/
async asyncInit()示例:
javascript
const aeExtension = new AEExtension();
// 构造函数会自动调用 asyncInit()getConnectionState()
获取连接状态
javascript
/**
* 获取当前连接状态
* @returns {ConnectionState} 连接状态枚举值
*/
getConnectionState()ConnectionState 枚举
javascript
const ConnectionState = {
DISCONNECTED: 'disconnected', // 已断开
CONNECTING: 'connecting', // 连接中
CONNECTED: 'connected', // 已连接
ERROR: 'error' // 连接错误
};示例:
javascript
const state = aeExtension.getConnectionState();
if (state === ConnectionState.CONNECTED) {
console.log('已连接到Eagle插件');
}testConnection()
测试与Eagle的连接
javascript
/**
* 测试与Eagle插件的连接
* @returns {Promise<Object>} 连接测试结果
*/
async testConnection()返回值
javascript
{
success: 'boolean', // 是否成功
connected: 'boolean', // 是否已连接
pingTime: 'number', // 延迟时间(毫秒)
error: 'string' // 错误信息(如果失败)
}disconnect()
断开与Eagle的连接
javascript
/**
* 断开与Eagle插件的连接
*/
disconnect()sendToEagle()
向Eagle发送消息
javascript
/**
* 向Eagle插件发送消息
* @param {Object} message - 要发送的消息
* @returns {Promise<Object>} 发送结果
*/
async sendToEagle(message)log()
记录日志
javascript
/**
* 记录日志
* @param {string} message - 日志消息
* @param {string} level - 日志级别 ('info', 'success', 'warning', 'error', 'debug')
* @param {Object} options - 日志选项
*/
log(message, level = 'info', options = {})getPanelId()
获取当前面板ID
javascript
/**
* 获取当前面板ID
* @returns {string} 面板ID ('panel1', 'panel2', 'panel3')
*/
getPanelId()getPresetFileName()
获取预设文件名
javascript
/**
* 获取当前面板的预设文件名
* @returns {string} 预设文件名
*/
getPresetFileName()UI 控制方法
showSettingsPanel()
显示设置面板
javascript
/**
* 显示高级设置面板
*/
showSettingsPanel()toggleLogPanel()
切换日志面板显示状态
javascript
/**
* 切换日志面板显示状态
*/
toggleLogPanel()switchLogView()
切换日志视图
javascript
/**
* 切换日志视图(AE日志/Eagle日志)
*/
switchLogView()clearLog()
清空日志
javascript
/**
* 清空当前日志视图
*/
clearLog()updateConnectionUI()
更新连接状态UI
javascript
/**
* 更新连接状态相关的UI元素
*/
updateConnectionUI()项目状态检测器类 (ProjectStatusChecker) (v2.4.0新增)
负责检测After Effects项目状态、Eagle连接状态等,确保操作的可行性和安全性。
构造函数
javascript
/**
* 项目状态检测器构造函数
* 负责检测AE项目状态、Eagle连接状态等
* @param {Object} options - 配置选项
*/
class ProjectStatusChecker {
constructor(options = {})属性:
cache: Map实例,用于缓存检测结果cacheTimeout: 缓存超时时间(默认5000ms)isChecking: 是否正在检测中lastCheckTime: 上次检测时间戳options: 配置选项
核心方法
checkProjectStatus()
执行完整的项目状态检测
javascript
/**
* 执行完整的项目状态检测
* @param {Object} options - 检测选项
* @param {boolean} options.forceRefresh - 是否强制刷新缓存
* @returns {Promise<Object>} 检测结果对象
* @throws {Error} 检测失败时抛出错误
*/
async checkProjectStatus(options = {})返回值结构
javascript
{
timestamp: 'number', // 检测时间戳
hasErrors: 'boolean', // 是否有错误
errors: 'Array<Object>', // 错误列表
warnings: 'Array<Object>', // 警告列表
info: { // 详细信息
environment: 'Object', // 环境信息
aeConnection: 'Object', // AE连接状态
project: 'Object', // 项目状态
composition: 'Object', // 合成状态
eagle: 'Object' // Eagle连接状态
},
recommendations: 'Array<Object>' // 操作建议
}示例:
javascript
const checker = new ProjectStatusChecker();
const result = await checker.checkProjectStatus();
if (result.hasErrors) {
console.error('检测到错误:', result.errors);
// 显示错误对话框
await showStatusErrorDialog(result);
} else {
console.log('状态检查通过,可以继续操作');
}checkEnvironment()
检测运行环境
javascript
/**
* 检测运行环境
* @returns {Object} 环境检测结果
*/
checkEnvironment()返回值
javascript
{
isCEP: 'boolean', // 是否为CEP环境
isDemo: 'boolean', // 是否为演示模式
hasCSInterface: 'boolean', // 是否有CSInterface
aeVersion: 'string', // AE版本号
cepVersion: 'string' // CEP版本号
}checkAEConnection()
检测After Effects连接状态
javascript
/**
* 检测After Effects连接状态
* @param {Object} options - 检测选项
* @param {boolean} options.forceRefresh - 是否强制刷新缓存
* @returns {Promise<Object>} AE连接检测结果
*/
async checkAEConnection(options = {})返回值
javascript
{
connected: 'boolean', // 是否已连接
responsive: 'boolean', // 是否响应
version: 'string', // AE版本
error: 'string', // 错误信息
responseTime: 'number' // 响应时间(毫秒)
}checkProjectState()
检测AE项目状态
javascript
/**
* 检测AE项目状态
* @param {Object} options - 检测选项
* @param {boolean} options.forceRefresh - 是否强制刷新缓存
* @returns {Promise<Object>} 项目状态检测结果
*/
async checkProjectState(options = {})返回值
javascript
{
hasProject: 'boolean', // 是否有项目
projectName: 'string', // 项目名称
projectPath: 'string', // 项目路径
isSaved: 'boolean', // 是否已保存
itemCount: 'number', // 项目素材数量
error: 'string' // 错误信息
}checkCompositionState()
检测合成状态
javascript
/**
* 检测合成状态
* @param {Object} options - 检测选项
* @param {boolean} options.forceRefresh - 是否强制刷新缓存
* @returns {Promise<Object>} 合成状态检测结果
*/
async checkCompositionState(options = {})返回值
javascript
{
hasComposition: 'boolean', // 是否有活动合成
activeComp: 'Object', // 活动合成信息
compCount: 'number', // 合成总数
layerCount: 'number', // 图层数量
error: 'string' // 错误信息
}checkEagleConnection()
检测Eagle应用连接状态
javascript
/**
* 检测Eagle应用连接状态
* @param {Object} options - 检测选项
* @param {boolean} options.forceRefresh - 是否强制刷新缓存
* @returns {Promise<Object>} Eagle连接检测结果
*/
async checkEagleConnection(options = {})返回值
javascript
{
connected: 'boolean', // 是否已连接
version: 'string', // Eagle版本
apiEndpoint: 'string', // API端点
responseTime: 'number', // 响应时间
error: 'string' // 错误信息
}validateProjectStatus()
验证项目状态
javascript
/**
* 验证项目状态是否满足特定要求
* @param {Object} requirements - 要求条件
* @param {boolean} requirements.requireProject - 是否需要项目
* @param {boolean} requirements.requireComposition - 是否需要合成
* @param {boolean} requirements.showWarnings - 是否显示警告
* @returns {Promise<boolean>} 是否满足要求
*/
async validateProjectStatus(requirements = {})executeScript()
执行ExtendScript脚本
javascript
/**
* 执行ExtendScript脚本
* @param {string} script - 要执行的脚本代码
* @param {number} [timeout=3000] - 超时时间(毫秒)
* @returns {Promise<string>} 脚本执行结果
*/
executeScript(script, timeout = 3000)cacheResult()
缓存检测结果
javascript
/**
* 缓存检测结果
* @param {string} key - 缓存键
* @param {Object} result - 检测结果
*/
cacheResult(key, result)getCachedResult()
获取缓存结果
javascript
/**
* 获取缓存结果
* @param {string} key - 缓存键
* @returns {Object|null} 缓存的结果或null
*/
getCachedResult(key)clearCache()
清除缓存
javascript
/**
* 清除所有缓存或特定缓存
* @param {string} [key] - 特定缓存键,如果不提供则清除所有缓存
*/
clearCache(key)配置管理器类 (ConfigManager) (v2.4.0新增)
负责管理扩展的所有配置设置和用户偏好。
构造函数
javascript
/**
* 配置管理器构造函数
* @param {Object} options - 配置选项
*/
class ConfigManager {
constructor(options = {})核心方法
get()
获取配置值
javascript
/**
* 获取配置值
* @param {string} key - 配置键,支持点分隔的路径
* @param {any} [defaultValue] - 默认值
* @returns {any} 配置值
*/
get(key, defaultValue = undefined)set()
设置配置值
javascript
/**
* 设置配置值
* @param {string} key - 配置键
* @param {any} value - 配置值
* @param {boolean} save - 是否保存到存储
* @returns {Object} 设置结果
*/
set(key, value, save = true)save()
保存配置到文件
javascript
/**
* 保存配置到文件
* @param {Object} config - 要保存的配置(可选)
* @returns {Promise<Object>} 保存结果
*/
async save(config = null)load()
从文件加载配置
javascript
/**
* 从文件加载配置
* @returns {Promise<Object>} 加载结果
*/
async load()reset()
重置配置为默认值
javascript
/**
* 重置配置为默认值
* @param {string} [key] - 要重置的配置键,不指定则重置所有
* @returns {Object} 重置结果
*/
reset(key = null)端口发现服务类 (PortDiscovery) (v2.4.0新增)
负责从Eagle注册的临时文件中发现服务端口。
构造函数
javascript
/**
* 端口发现服务构造函数
* @param {Function} logger - 日志函数
*/
class PortDiscovery {
constructor(logger)核心方法
discoverPort()
发现Eagle服务端口
javascript
/**
* 发现Eagle服务端口
* @returns {Promise<Object>} 发现结果
*/
async discoverPort()getEaglePort()
获取Eagle端口(主要方法)
javascript
/**
* 获取Eagle端口(主要方法)
* @returns {Promise<number>} Eagle端口号
*/
async getEaglePort()clearCache()
清除缓存
javascript
/**
* 清除缓存
*/
clearCache()getDiscoveryStatus()
获取发现状态
javascript
/**
* 获取发现状态
* @returns {Promise<Object>} 发现状态信息
*/
async getDiscoveryStatus()使用示例
连接管理
javascript
// 创建AE扩展实例
const aeExtension = new AEExtension();
// 测试连接
const connectionResult = await aeExtension.testConnection();
if (connectionResult.success) {
console.log(`连接成功,延迟: ${connectionResult.pingTime}ms`);
} else {
console.error('连接失败:', connectionResult.error);
}
// 断开连接
aeExtension.disconnect();项目状态检测
javascript
// 创建项目状态检测器
const projectStatusChecker = new ProjectStatusChecker();
// 检查项目状态
const projectStatus = await projectStatusChecker.checkProjectStatus();
console.log('项目状态:', projectStatus);
// 验证项目状态要求
const isValid = await projectStatusChecker.validateProjectStatus({
requireProject: true,
requireComposition: true,
showWarnings: true
});
if (isValid) {
console.log('项目状态满足要求');
} else {
console.log('项目状态不满足要求');
}配置管理
javascript
// 创建配置管理器
const configManager = new ConfigManager();
// 获取配置
const port = configManager.get('connection.websocket.port', 8080);
const theme = configManager.get('ui.theme', 'dark');
// 设置配置
const setResult = configManager.set('ui.theme', 'light');
if (setResult.success) {
console.log('配置设置成功');
}
// 保存配置
const saveResult = await configManager.save();
if (saveResult.success) {
console.log('配置保存成功');
}端口发现
javascript
// 创建端口发现服务
const portDiscovery = new PortDiscovery(console.log);
// 发现Eagle端口
const port = await portDiscovery.getEaglePort();
console.log(`发现Eagle端口: ${port}`);
// 获取详细状态
const status = await portDiscovery.getDiscoveryStatus();
console.log('端口发现状态:', status);最佳实践
错误处理
javascript
// 为所有异步操作提供统一的错误处理
async function safeExecute(asyncFunction, errorMessage) {
try {
return await asyncFunction();
} catch (error) {
console.error(errorMessage, error);
// 可以显示用户友好的错误消息
aeExtension.log(`${errorMessage}: ${error.message}`, 'error');
return null;
}
}
// 使用示例
const result = await safeExecute(
() => aeExtension.testConnection(),
'连接测试失败'
);性能优化
javascript
// 合理使用缓存避免重复操作
let cachedProjectStatus = null;
let lastCacheTime = 0;
const CACHE_TIMEOUT = 5000; // 5秒缓存
async function getProjectStatus(forceRefresh = false) {
const now = Date.now();
// 检查缓存是否有效
if (!forceRefresh && cachedProjectStatus && (now - lastCacheTime) < CACHE_TIMEOUT) {
return cachedProjectStatus;
}
// 重新获取状态
cachedProjectStatus = await projectStatusChecker.checkProjectStatus();
lastCacheTime = now;
return cachedProjectStatus;
}内存管理
javascript
// 在适当时候清理资源
function cleanupExtension(aeExtension) {
// 停止轮询
if (aeExtension.pollingManager) {
aeExtension.pollingManager.stop();
}
// 停止监控
if (aeExtension.projectStatusChecker) {
// 清理项目状态检测器资源
}
// 清理其他资源
aeExtension.csInterface = null;
aeExtension.logManager = null;
aeExtension.settingsManager = null;
}