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