Adobe InDesign JavaScript复制选中对象链接名至剪贴板报错求助
修复后的InDesign JavaScript代码(复制选中框架的链接文件名到剪贴板)
错误分析
- 选中对象类型判断错误:你选中的是包含链接的图形框架(
GraphicFrame),而非Link对象,原代码中selectedItems[i] instanceof Link的判断永远不成立,导致无法收集文件名。 - 剪贴板操作错误:InDesign的
app.copy()方法用于复制选中的文档对象,不能直接传入字符串,需要用ExtendScript内置的$.setClipboard()来设置系统剪贴板。 - 缺少文档存在判断:未打开任何文档时,
app.activeDocument会返回undefined,直接访问会抛出错误。
修复后的代码
try { // 先检查是否有打开的文档 if (!app.activeDocument) { alert("请先打开一个InDesign文档!"); exit(); } var selectedItems = app.activeDocument.selection; var fileNames = []; if (selectedItems.length > 0) { for (var i = 0; i < selectedItems.length; i++) { var item = selectedItems[i]; // 判断对象是否是可包含链接的框架,且存在有效链接 if (item.hasOwnProperty("itemLink") && item.itemLink !== null) { // 获取链接文件名并加入数组 fileNames.push(item.itemLink.name); } } if (fileNames.length > 0) { // 将文件名用换行符拼接,写入系统剪贴板 var fileNamesString = fileNames.join("\n"); $.setClipboard(fileNamesString); alert("已复制以下链接文件名到剪贴板:\n" + fileNamesString); } else { alert("选中的对象中没有包含有效链接的框架!"); } } else { alert("请至少选中一个包含链接的框架!"); } } catch (e) { alert("发生错误:\n" + e.message); }
关键修改点说明
- 增加文档存在检查:提前判断
app.activeDocument是否存在,避免无文档时的报错。 - 修正对象类型判断:通过检查对象是否有
itemLink属性且属性不为空,准确识别包含链接的框架。 - 替换剪贴板操作:用
$.setClipboard()替代app.copy(),实现字符串到系统剪贴板的复制。 - 优化提示信息:调整提示内容,更精准反馈操作状态。
内容的提问来源于stack exchange,提问作者pt-t
相关产品推荐
相关产品推荐

