Photoshop 2015 扩展无法访问所有数组项
Photoshop 2015 extension not able to access all array items
我是一名新手程序员,也是 adobe 扩展的新手,但我开发的扩展在 Photoshop 2015 中无法正常工作。它在 PS 2017、2018 和 2019 中完美运行。
我正在使用 JSX 从 JSON 文件中读取数组数据,并使用 main.js 文件中的事件侦听器来 return 数据。该扩展程序从 returned 数组中读取设置。除了在 PS 2015 年它只能 return UserID 而没有别的以外,它工作得很好。
JSX 代码从本地文件读取数据:
function ReadUserStoredDataFromFile(vfilepath){
var rd = ReadFileData(vfilepath);
SendDataToListenerJS("getuserstoredinfo",rd);
}
function ReadFileData(vfullpath){
fle = File(vfullpath);
var filedata = 0;
if(fle.exists){
fle.open('r');
filedata = fle.read();
fle.close();
}
return filedata;
}
function SendDataToListenerJS(JSlistenerName,DatatoJS){
try {
var xLib = new ExternalObject("lib:\PlugPlugExternalObject");
} catch (e) {
alert(e);
}
if (xLib) {
var eventObj = new CSXSEvent();
eventObj.type = JSlistenerName;
eventObj.data = DatatoJS;
eventObj.dispatch();
}
}
INDEX.HTML
var datareceived_arry = new Array();
MAIN.JS代码
var usermydocuments = csInterface.getSystemPath(SystemPath.MY_DOCUMENTS);
setTimeout(AutoStatus, 1000);
function AutoStatus(){
var usdocfp = '"' + usermydocuments + '/rt/autostatus.json' + '"';
csInterface.evalScript('ReadUserStoredDataFromFile('+ usdocfp +')');
}
csInterface.addEventListener("getuserstoredinfo", function(evt) {
datareceived_arry = evt.data;
var unoti = GetAllNotifications();
});
function GetAllNotifications(){
//get user notification
var allunotifications = "none";
//add userid
allunotifications = "<b>Userid: " + datareceived_arry['userinfo']['userid'] + "</b>";
alert(datareceived_arry['userinfo']['userid']); //This shows the userid Fari
alert(JSON.stringify(datareceived_arry['apps'][0]['version'])); //This shows undefined
alert(JSON.stringify(datareceived_arry)); //This shows all the data
$('#showdata').html(JSON.stringify(datareceived_arry)); //This shows all the data
}
这是保存到文件的数据:
{"0":0,"userinfo":{"userid":"fari","loginstatus":1,"usernotification":""},"apps":[{"appid":"rt5processor","accounttype":"Admin","status":"6","datestarted":"2019-10-11","usagedata":"1","flagcookiedata":"0","flagstorage":"0","appname":"RTPROCESSOR","version":"1.11.8","appnotification":"","apptype":"extension","updateflag":"0"},{"appid":"rt5sharpen","accounttype":"Admin","status":"6","datestarted":"2019-10-11","usagedata":"1","flagcookiedata":"0","flagstorage":"1","appname":"RTSHARPEN","version":"1.11.8","appnotification":"","apptype":"extension","updateflag":"0"}],"tutorials":[{"appid":"rtp","tutorialurl":"https://www.youtube.com/watch?v=W3cKq7S3qKc","featureonapp":"sharpen3"},{"appid":"rtp","tutorialurl":"https://www.youtube.com/watch?v=fKn5fG3M1m8","featureonapp":"Sharpen"},{"appid":"rtp","tutorialurl":"https://www.youtube.com/watch?v=m9M7J9uMrJk","featureonapp":"sharpen2"}],"misc":{"globalnotification":""}}
我使用了将被替换的虚拟测试数据。它 return 在 PS 2017、2018、2019 年都很好。它使用 cep 4,但我已经尝试过 cep 6,但问题仍然存在。任何帮助表示赞赏。
也许这背后有一个伟大的故事,但显然 CC2015 中的事件对象解析器已损坏:虽然简单的对象工作(因此您的 datareceived_arry['userinfo']['userid']
可访问)数组被转换为字符串:JSON面板接收到的信息如下所示(注意现在所有数组都是字符串):
{
"0": "0",
"tutorials": "[{\"tutorialurl\":\"https://www.youtube.com/watch?v=W3cKq7S3qKc\",\"appid\":\"rtp\",\"featureonapp\":\"sharpen3\"},{\"tutorialurl\":\"https://www.youtube.com/watch?v=fKn5fG3M1m8\",\"appid\":\"rtp\",\"featureonapp\":\"Sharpen\"},{\"tutorialurl\":\"https://www.youtube.com/watch?v=m9M7J9uMrJk\",\"appid\":\"rtp\",\"featureonapp\":\"sharpen2\"}]",
"userinfo":
{
"usernotification": "",
"userid": "fari",
"loginstatus": "1"
},
"apps": "[{\"version\":\"1.11.8\",\"datestarted\":\"2019-10-11\",\"appname\":\"RTPROCESSOR\",\"updateflag\":\"0\",\"flagstorage\":\"0\",\"accounttype\":\"Admin\",\"appid\":\"rt5processor\",\"status\":\"6\",\"usagedata\":\"1\",\"flagcookiedata\":\"0\",\"apptype\":\"extension\",\"appnotification\":\"\"},{\"version\":\"1.11.8\",\"datestarted\":\"2019-10-11\",\"appname\":\"RTSHARPEN\",\"updateflag\":\"0\",\"flagstorage\":\"1\",\"accounttype\":\"Admin\",\"appid\":\"rt5sharpen\",\"status\":\"6\",\"usagedata\":\"1\",\"flagcookiedata\":\"0\",\"apptype\":\"extension\",\"appnotification\":\"\"}]",
"misc":
{
"globalnotification": ""
}
}
如果你真的想要使用PlugPlugExternalObject
将数据从 jsx 传递到 js 为了一些合理的我相信你必须为你的对象编写一个自定义解析器.否则我建议简单地 return 从 jsx 到 js 的数据并在回调中使用它:
JSX:
function ReadUserStoredDataFromFile(vfilepath)
{
var rd = ReadFileData(vfilepath);
return rd;
}
function ReadFileData(vfullpath)
{
fle = File(vfullpath);
var filedata = 0;
if (fle.exists)
{
fle.open('r');
filedata = fle.read();
fle.close();
}
return filedata;
}
JS:
var datareceived_arry = [];
var usermydocuments = csInterface.getSystemPath(SystemPath.MY_DOCUMENTS);
setTimeout(AutoStatus, 1000);
function AutoStatus()
{
var usdocfp = '"' + usermydocuments + '/rt/autostatus.json' + '"';
csInterface.evalScript('ReadUserStoredDataFromFile(' + usdocfp + ')', function(res)
{
datareceived_arry = JSON.parse(res) // result comes as a string
//get user notification
var allunotifications = "none";
//add userid
allunotifications = "<b>Userid: " + datareceived_arry['userinfo']['userid'] + "</b>";
alert(datareceived_arry['userinfo']['userid']); //This shows the userid Fari
alert(JSON.stringify(datareceived_arry['apps'][0]['version'])); //This shows undefined
alert(JSON.stringify(datareceived_arry)); //This shows all the data
$('#showdata').html(JSON.stringify(datareceived_arry)); //This shows all the data
});
}
我是一名新手程序员,也是 adobe 扩展的新手,但我开发的扩展在 Photoshop 2015 中无法正常工作。它在 PS 2017、2018 和 2019 中完美运行。
我正在使用 JSX 从 JSON 文件中读取数组数据,并使用 main.js 文件中的事件侦听器来 return 数据。该扩展程序从 returned 数组中读取设置。除了在 PS 2015 年它只能 return UserID 而没有别的以外,它工作得很好。
JSX 代码从本地文件读取数据:
function ReadUserStoredDataFromFile(vfilepath){
var rd = ReadFileData(vfilepath);
SendDataToListenerJS("getuserstoredinfo",rd);
}
function ReadFileData(vfullpath){
fle = File(vfullpath);
var filedata = 0;
if(fle.exists){
fle.open('r');
filedata = fle.read();
fle.close();
}
return filedata;
}
function SendDataToListenerJS(JSlistenerName,DatatoJS){
try {
var xLib = new ExternalObject("lib:\PlugPlugExternalObject");
} catch (e) {
alert(e);
}
if (xLib) {
var eventObj = new CSXSEvent();
eventObj.type = JSlistenerName;
eventObj.data = DatatoJS;
eventObj.dispatch();
}
}
INDEX.HTML
var datareceived_arry = new Array();
MAIN.JS代码
var usermydocuments = csInterface.getSystemPath(SystemPath.MY_DOCUMENTS);
setTimeout(AutoStatus, 1000);
function AutoStatus(){
var usdocfp = '"' + usermydocuments + '/rt/autostatus.json' + '"';
csInterface.evalScript('ReadUserStoredDataFromFile('+ usdocfp +')');
}
csInterface.addEventListener("getuserstoredinfo", function(evt) {
datareceived_arry = evt.data;
var unoti = GetAllNotifications();
});
function GetAllNotifications(){
//get user notification
var allunotifications = "none";
//add userid
allunotifications = "<b>Userid: " + datareceived_arry['userinfo']['userid'] + "</b>";
alert(datareceived_arry['userinfo']['userid']); //This shows the userid Fari
alert(JSON.stringify(datareceived_arry['apps'][0]['version'])); //This shows undefined
alert(JSON.stringify(datareceived_arry)); //This shows all the data
$('#showdata').html(JSON.stringify(datareceived_arry)); //This shows all the data
}
这是保存到文件的数据:
{"0":0,"userinfo":{"userid":"fari","loginstatus":1,"usernotification":""},"apps":[{"appid":"rt5processor","accounttype":"Admin","status":"6","datestarted":"2019-10-11","usagedata":"1","flagcookiedata":"0","flagstorage":"0","appname":"RTPROCESSOR","version":"1.11.8","appnotification":"","apptype":"extension","updateflag":"0"},{"appid":"rt5sharpen","accounttype":"Admin","status":"6","datestarted":"2019-10-11","usagedata":"1","flagcookiedata":"0","flagstorage":"1","appname":"RTSHARPEN","version":"1.11.8","appnotification":"","apptype":"extension","updateflag":"0"}],"tutorials":[{"appid":"rtp","tutorialurl":"https://www.youtube.com/watch?v=W3cKq7S3qKc","featureonapp":"sharpen3"},{"appid":"rtp","tutorialurl":"https://www.youtube.com/watch?v=fKn5fG3M1m8","featureonapp":"Sharpen"},{"appid":"rtp","tutorialurl":"https://www.youtube.com/watch?v=m9M7J9uMrJk","featureonapp":"sharpen2"}],"misc":{"globalnotification":""}}
我使用了将被替换的虚拟测试数据。它 return 在 PS 2017、2018、2019 年都很好。它使用 cep 4,但我已经尝试过 cep 6,但问题仍然存在。任何帮助表示赞赏。
也许这背后有一个伟大的故事,但显然 CC2015 中的事件对象解析器已损坏:虽然简单的对象工作(因此您的 datareceived_arry['userinfo']['userid']
可访问)数组被转换为字符串:JSON面板接收到的信息如下所示(注意现在所有数组都是字符串):
{
"0": "0",
"tutorials": "[{\"tutorialurl\":\"https://www.youtube.com/watch?v=W3cKq7S3qKc\",\"appid\":\"rtp\",\"featureonapp\":\"sharpen3\"},{\"tutorialurl\":\"https://www.youtube.com/watch?v=fKn5fG3M1m8\",\"appid\":\"rtp\",\"featureonapp\":\"Sharpen\"},{\"tutorialurl\":\"https://www.youtube.com/watch?v=m9M7J9uMrJk\",\"appid\":\"rtp\",\"featureonapp\":\"sharpen2\"}]",
"userinfo":
{
"usernotification": "",
"userid": "fari",
"loginstatus": "1"
},
"apps": "[{\"version\":\"1.11.8\",\"datestarted\":\"2019-10-11\",\"appname\":\"RTPROCESSOR\",\"updateflag\":\"0\",\"flagstorage\":\"0\",\"accounttype\":\"Admin\",\"appid\":\"rt5processor\",\"status\":\"6\",\"usagedata\":\"1\",\"flagcookiedata\":\"0\",\"apptype\":\"extension\",\"appnotification\":\"\"},{\"version\":\"1.11.8\",\"datestarted\":\"2019-10-11\",\"appname\":\"RTSHARPEN\",\"updateflag\":\"0\",\"flagstorage\":\"1\",\"accounttype\":\"Admin\",\"appid\":\"rt5sharpen\",\"status\":\"6\",\"usagedata\":\"1\",\"flagcookiedata\":\"0\",\"apptype\":\"extension\",\"appnotification\":\"\"}]",
"misc":
{
"globalnotification": ""
}
}
如果你真的想要使用PlugPlugExternalObject
将数据从 jsx 传递到 js 为了一些合理的我相信你必须为你的对象编写一个自定义解析器.否则我建议简单地 return 从 jsx 到 js 的数据并在回调中使用它:
JSX:
function ReadUserStoredDataFromFile(vfilepath)
{
var rd = ReadFileData(vfilepath);
return rd;
}
function ReadFileData(vfullpath)
{
fle = File(vfullpath);
var filedata = 0;
if (fle.exists)
{
fle.open('r');
filedata = fle.read();
fle.close();
}
return filedata;
}
JS:
var datareceived_arry = [];
var usermydocuments = csInterface.getSystemPath(SystemPath.MY_DOCUMENTS);
setTimeout(AutoStatus, 1000);
function AutoStatus()
{
var usdocfp = '"' + usermydocuments + '/rt/autostatus.json' + '"';
csInterface.evalScript('ReadUserStoredDataFromFile(' + usdocfp + ')', function(res)
{
datareceived_arry = JSON.parse(res) // result comes as a string
//get user notification
var allunotifications = "none";
//add userid
allunotifications = "<b>Userid: " + datareceived_arry['userinfo']['userid'] + "</b>";
alert(datareceived_arry['userinfo']['userid']); //This shows the userid Fari
alert(JSON.stringify(datareceived_arry['apps'][0]['version'])); //This shows undefined
alert(JSON.stringify(datareceived_arry)); //This shows all the data
$('#showdata').html(JSON.stringify(datareceived_arry)); //This shows all the data
});
}