3

我在 InDesign 中运行了一个(非常大的)脚本,该脚本有一次将库资源放置到页面上,然后将其移动到某个图层。该脚本在我们这里的所有计算机上都可以正常运行,但前提是当时在 InDesign 中没有打开其他文档

如果另一个文档打开的,那么当脚本试图将放置的资产移动到另一个层时会出现错误:

JavaScript 错误!

错误号:54 错误字符串:未捕获的 JavaScript 异常:第 2651 行出现错误 设置属性“itemLayer”的值无效。预期层,但接收层。

注意粗体部分。它收到了它所期望的东西,所以它发脾气了?这对我来说毫无意义。作为记录,这是它引用的代码行:

curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)");

并且,为了记录,curAsset[0] 从库中获取并已放置在文档中的资产对象。并且document是已经分配给当前打开的文档的变量。

我的工作理论是,在 InDesign 中打开的其他文档会导致此错误,因为这是迄今为止我能够做出的唯一关联,但我不知道如何。该脚本已经有变量document,它仅引用打开的文档之一。脚本中的其他所有内容都运行良好,除了这一行(到目前为止)。

4

2 回答 2

0

TLDR;确保您的“文档”对象与用于构建“curAsset”对象数组的对象相同。

我希望您从那时起就找到了解决方案,但如果您还没有找到解决方案,我可能会为您提供线索。我自己处理过这种类型的错误“预期 X,但收到 X”。

如果不查看其余代码很难知道,但我怀疑对“文档”对象的引用并未引用“curAsset”对象所引用的同一文档。

就我而言,当我发生这种情况时,我试图将一个段落从一个文档复制到另一个文档,然后分配一个段落样式,但是在尝试将其应用于段落时,我错误地使用了第一个文档中的段落样式引用在第二份文件上。虽然两个文档具有相同的模板和段落样式,但对段落样式对象的引用对于文档来说是唯一的。

于 2014-10-14T12:32:12.847 回答
0

这是一个非常有趣/令人愤怒的错误信息。你可以随时尝试getElements()。它有时像魔术一样工作。

curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)").getElements()[0];

另一件事要考虑。InDesign 中的 Extendscript 有时不区分特定类型的对象和所述类型的对象数组。因此,您可能希望确保您的查询只返回一个项目。

于 2013-11-28T05:41:09.983 回答