After Effects中JavaScript调用addText创建文本无响应问题排查
问题排查与修复
你的脚本没反应是因为存在几个语法和逻辑错误,直接导致脚本执行失败,以下是问题点和修复后的代码:
核心问题
- 未定义的
text变量:addText(text)里的text没有声明或赋值,AE不知道要添加什么文本。 - 字体名未加引号:
sourceText.font = Arial;中Arial是字符串,必须用引号包裹,否则会被当作未定义变量。 - 错误处理不彻底:当没有选中合成或图层时,弹出警告后代码仍继续执行,会触发后续的空值访问错误,直接中断脚本。
- 层引用错误:
comp.layer(1)不一定是你刚创建的文本层,应该直接用创建时返回的textLayer变量来操作。 - 提前访问选中层:在判断选中层是否存在之前就赋值
selectedlayer = comp.selectedLayers[0],会导致无选中层时报错。
修复后的代码
button6.onClick = function() { addText(); function addText() { app.beginUndoGroup("My Process"); var comp = app.project.activeItem; // 先判断是否选中合成,没选中就提示并终止 if (!(comp && comp instanceof CompItem)) { alert("No composition selected"); app.endUndoGroup(); return; } // 判断是否选中图层,没选中就提示并终止 if (comp.selectedLayers.length === 0) { alert("Select the layer"); app.endUndoGroup(); return; } var selectedlayer = comp.selectedLayers[0]; var outpoint = selectedlayer.outPoint; var inpoint = selectedlayer.inPoint; var duration = outpoint - inpoint; // 定义要添加的文本内容,这里替换成你需要的文本 var textContent = "Hello AE Script"; var textLayer = comp.layers.addText(textContent); var sourceText = textLayer.property("Source Text").value; sourceText.fontSize = 100; // 字体名加引号 sourceText.font = "Arial"; textLayer.property("Source Text").setValue(sourceText); textLayer.adjustmentLayer = false; textLayer.inPoint = inpoint; textLayer.label = 1; // 直接用新建的textLayer移动位置 textLayer.moveBefore(selectedlayer); app.endUndoGroup(); } }
关键修改说明
- 添加文本内容定义:新增
textContent变量,明确要添加的文本内容,传入addText方法。 - 修正字体名写法:把
Arial改为"Arial",符合字符串语法要求。 - 完善错误处理:每次弹出警告后调用
return终止函数,避免后续代码执行出错;同时判断comp是否为合成项,防止选中非合成的项目。 - 正确引用新建层:用
textLayer.moveBefore(selectedlayer)替代comp.layer(1),确保操作的是刚创建的文本层。 - 调整选中层的获取顺序:先判断选中层是否存在,再赋值
selectedlayer,避免空值访问报错。
内容的提问来源于stack exchange,提问作者Ksigon
相关产品推荐
相关产品推荐

