You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
    }
}

关键修改说明

  1. 添加文本内容定义:新增textContent变量,明确要添加的文本内容,传入addText方法。
  2. 修正字体名写法:把Arial改为"Arial",符合字符串语法要求。
  3. 完善错误处理:每次弹出警告后调用return终止函数,避免后续代码执行出错;同时判断comp是否为合成项,防止选中非合成的项目。
  4. 正确引用新建层:用textLayer.moveBefore(selectedlayer)替代comp.layer(1),确保操作的是刚创建的文本层。
  5. 调整选中层的获取顺序:先判断选中层是否存在,再赋值selectedlayer,避免空值访问报错。

内容的提问来源于stack exchange,提问作者Ksigon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:41:22