Photoshop Javascript 的奇怪行为

Posted

技术标签:

【中文标题】Photoshop Javascript 的奇怪行为【英文标题】:Photoshop Javascript strange behaviour 【发布时间】:2012-05-30 13:58:31 【问题描述】:

我正在尝试找出是我的问题还是 CS5 javascript 引擎有问题。 我的 Photoshop 文档有一个名为“A”的图层和一个名为“Group 1”的图层组。

考虑这个例子:

var Mess = "";
var Layers = app.activeDocument.layers;
alert(Layers.length);
for (n=0; n<app.activeDocument.layers.length; n++) 
  Mess = Mess + app.activeDocument.layers[n].name + "\r\n";

alert(Mess);

这将显示 2 的长度,然后列出层: 一个 第一组

到目前为止一切都很好。但是如果我们在 for 循环中使用变量 Layers 来代替,我们会得到不同的结果。

var Mess = "";
var Layers = app.activeDocument.layers;
alert(Layers.length);
for (n=0; n<Layers.length; n++) 
  Mess = Mess + app.activeDocument.layers[n].name + "\r\n";

alert(Mess);

和之前一样,我们得到长度 2,但现在只列出了一层: 一个

这两个代码示例不应该产生相同的结果吗?!?

【问题讨论】:

alert(app.activeDocument.layers.length) 说 2 吗?这是我看到的唯一不同之处。 是的,alert(app.activeDocument.layers.length) 说 2。但是如果我通过变量访问图层对象,它的行为就不一样了。 这些代码对我来说产生相同的结果... 您的意思是Mess = Mess + Layers[n].name + "\r\n"; 惹麻烦了吗?我不太了解 JS 来解释其中的区别,但我记得尝试过类似的东西,但不喜欢我得到的东西。 【参考方案1】:

我认为Layers 是 Photoshop DOM 中的保留字。 Photoshop CS6 JavaScript Reference

var Mess = "";
var lyrs = app.activeDocument.layers;
alert(lyrs.length);
for (n=0; n<lyrs.length; n++) 
    Mess = Mess + app.activeDocument.layers[n].name + "\r\n";

alert(Mess);

这似乎在更改变量名称后现在可以工作了。

【讨论】:

你知道在哪里可以找到 Photoshop DOM 保留字列表吗?你哪里合适。当我更改名称时,它起作用了。 您是否使用 ExtendScript 工具包作为您的 IDE?如果是这样,您可以选择Help &gt; Object Model Viewer 来浏览 DOM。请务必从下拉菜单中选择要查看的对象库(Photoshop、Illustrator 等)。 我的 ExtendScript Toolkit CS5 坏了,它抱怨脚本 04cdicmanager.jsx 中的第 1 行,所以我无法启动它。从一开始就是这样(全新安装)。

以上是关于Photoshop Javascript 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

使用扩展脚本(javascript)如何从 Photoshop 颜色表中获取颜色值

javascript Dataset para Photoshop

Photoshop JavaScript 图层创建

Javascript 的奇怪 RegEx 请求

JavaScript 适用于Adobe Photoshop CS2的图像缩放器

Photoshop Javascript 获取活动文档中的所有图层