我有一个(非常大的)脚本在InDesign中运行,它一度将Library资源放到页面上,然后将其移动到某个层。此脚本在此处的所有计算机上运行正常,但仅当InDesign中没有其他文档打开时。
如果另一个文档处于打开状态,则当脚本尝试将放置的资源移动到另一个图层时会显示错误:
JavaScript错误!
错误号码:54错误字符串:未捕获的JavaScript异常:行号2651处的错误设置属性“itemLayer”的值无效。预期的图层,但接收图层。
请注意粗体部分。它收到了它所期待的东西,所以它会发脾气?这对我来说毫无意义。为了记录,这是它引用的代码行:
curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)");
而且,为了记录,curAsset[0]
是从图书馆取得的资产对象,已经放在文件上。 document
是一个已经分配给当前打开文档的变量。
我的工作理论是在InDesign中打开的其他文档导致了这个错误,因为这是迄今为止我能够做到的唯一关联,但我不知道如何。该脚本已经有变量document
,它只引用其中一个文档。并且脚本中的其他所有内容都运行良好,除了这一行(到目前为止)。
这是一个非常有趣/令人愤怒的错误消息。你可以随时尝试getElements()
。它有时像魔术一样工作。
curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)").getElements()[0];
还有一件事要考虑。 InDesign中的Extendscript有时不区分某种类型的对象和所述类型的对象数组。因此,您可能希望确保查询仅返回单个项目。
TLDR;确保“document”对象与用于构建“curAsset”对象数组的对象相同。
我希望你从那以后找到了解决方案,但如果你没有,我可能会找到一个解决方案。我已经处理过这种类型的错误“Expected X,但是收到了X”。
如果没有看到其余的代码,很难知道,但我怀疑对“文档”对象的引用并没有引用“curAsset”对象所引用的相同文档。
在我遇到这种情况的情况下,我试图将一个段落从一个文档复制到另一个,然后分配一个段落样式,但是当我试图将它应用于段落时,我错误地使用了第一个文档中段落样式的引用在第二份文件上。虽然两个文档都具有相同的模板和段落样式,但对段落样式对象的引用对于文档是唯一的。