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 > Object Model Viewer
来浏览 DOM。请务必从下拉菜单中选择要查看的对象库(Photoshop、Illustrator 等)。
我的 ExtendScript Toolkit CS5 坏了,它抱怨脚本 04cdicmanager.jsx 中的第 1 行,所以我无法启动它。从一开始就是这样(全新安装)。以上是关于Photoshop Javascript 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
使用扩展脚本(javascript)如何从 Photoshop 颜色表中获取颜色值
javascript Dataset para Photoshop