在使用Photoshop中的evalScript将数据从JSX发送到JS时遇到了问题。
在以下示例中,我尝试将文档docInfo中的文档宽度,高度和标尺单位发送回CEP Panel JS。
问题是当我解析对象时,它将三个属性都显示为对象,而我认为它们应该都是字符串。
JS :
function psdInfo() {
csInterface.evalScript("getDocInfo()", function(res) {
if (EvalScript_ErrMessage == res) {
console.error('EvalScript_ErrMessage and res is' + typeof res + ' res is ' + res);
}
else {
var o = JSON.parse(res);
var str = "Object received from JSX:\n";
for (var prop in o) {
str += prop + " [" + typeof o[prop] +" ]: " + o[prop] + ".\n";
}
console.log(str);
}
});
}
JSX :
function getDocInfo()
{
var doc = app.activeDocument,
docWidth = doc.width,
docHeight = doc.height,
originalRulerUnits = app.preferences.rulerUnit;
var docInfo = {
width: docWidth,
height: docHeight,
originalRulerUnits: originalRulerUnits
};
return JSON.stringify(docInfo);
}
我期望的结果:
Object received from JSX:
width [string ]: '1920 px'.
height [string ]: '1920 px'.
originalRulerUnits [string ]: 'UNITS.PIXELS'.
我得到的:
Object received from JSX:
width [object ]: [object Object].
height [object ]: [object Object].
originalRulerUnits [object ]: [object Object].
我的问题是-我做错什么了吗?这些实际上是对象吗?
如果是,该如何获取我想要的信息?如何将JSX端的对象解析/转换为字符串,还是应该在JS端做到这一点?
有关如何做的示例将非常有帮助。我正在尝试学习Adobe CEP面板。
答案 0 :(得分:1)
这些特定于ExtendScript定义的Photoshop对象:高度和宽度为UnitValues
(它们都带有值和单位),而rulerUnits为Units
,JSON无法正确地将它们作为对象传递从JSX到JS。因此,在传递docInfo
之前,您需要确保已使用.toString()
方法将它们转换为字符串:
function getDocInfo()
{
var doc = app.activeDocument,
docWidth = doc.width.toString(),
docHeight = doc.height.toString(),
originalRulerUnits = app.preferences.rulerUnits.toString();
var docInfo = {
width: docWidth,
height: docHeight,
originalRulerUnits: originalRulerUnits
};
return JSON.stringify(docInfo);
}
结果:
{"width":"1024 px","height":"1024 px","originalRulerUnits":"Units.PIXELS"}
您可以在JavaScript Tools Guide pdf中了解有关特定对象的更多信息:File
,Folder
,SolidColor
等。