【问题标题】:InDesign script error: "Expected Layer, but received Layer"InDesign 脚本错误:“预期图层,但收到图层”
【发布时间】:2013-10-23 07:11:11
【问题描述】:

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

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

JavaScript 错误!

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

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

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

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

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

【问题讨论】:

  • 当其他文档以某种方式打开时,它会不会是从另一个文档中获取 Layer 对象?
  • 这几乎是我的工作理论,但我不知道如何或为什么它只对引用document 变量的数十行代码中的这一行代码执行此操作。我在这里告诉大家,在运行脚本之前确保在 InDesign 中没有打开任何文档,但这显然并不理想。
  • +1 仅用于错误消息。

标签: javascript runtime-error layer adobe-indesign extendscript


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 1970-01-01
      • 2015-02-19
      • 2015-09-10
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多