Доброго времени суток, дамы и господа!
Столкнулся с проблемой. 3 дня собственных тыканьей почти вслепую, ничего не дали...
Есть панель расширения для Photoshop. До недавних пор работала без нареканий, как часы на разных версиях Photoshop. Но вот с выходом последней версии Photoshop 2018 часть функций стала работать совсем не так, как задумывалось.
Есть колонка чекбоксов. На каждый из которых повешен свой отдельный скрипт. Инициирующий определенную последовательность действий в Photoshop. И есть кнопка "Старт", которая и запускает все отмеченные скрипты. Точнее, должна запускать последовательно.
<div><input type="checkbox" id="shest1"><button class="desin_a" id="mini_set_a">Минимальный набор коррекции</button></div>
<div><input type="checkbox" id="shest2"><button class="desin_a" id="dar_bl_a">Затемнение синевы неба</button></div>
<div><input type="checkbox" id="shest3"><button class="desin_a" id="con_mid_a">Контраст средних тонов</button></div>
<div><input type="checkbox" id="shest4"><button class="desin_a" id="des_r_a">Снижение насыщенного красного</button></div>
<div><input type="checkbox" id="shest5"><button class="desin_a" id="clar_a">Четкость</button></div>
<div><input type="checkbox" id="shest6"><button class="desin_a" id="abw_a">Авто баланс</button></div>
<div><input type="checkbox" id="shest7"><button class="desin_a" id="loc_col_a">Локальный цветовой контраст</button></div>
........ и так далее ........
<a href="#" class="button20" id="start_a">Старт</a>
И такая вот функция, выполняющая все это:
var ctd1 = document.querySelector('#shest1');
var ctd2 = document.querySelector('#shest2');
var ctd3 = document.querySelector('#shest3');
var ctd4 = document.querySelector('#shest4');
var ctd5 = document.querySelector('#shest5');
var ctd6 = document.querySelector('#shest6');
var ctd7 = document.querySelector('#shest7');
$("#start_a").click(function(a) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Start.jsx")');
if (ctd1.checked) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Minimum_Settings_A.jsx")');
} else {};
if (ctd2.checked) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'add_cor_a/Skitalets_Darken_Blue_Sky_v1_1_A.jsx")');
} else {};
if (ctd3.checked) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Contrast_Midtones_A.jsx")');
} else {};
if (ctd4.checked) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Decrease_Red_A.jsx")');
} else {};
if (ctd5.checked) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Clarity_A.jsx")');
} else {};
if (ctd6.checked) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Auto_Balance_New_A.jsx")');
} else {};
if (ctd7.checked) {
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Local_Color_Contrast_A.jsx")');
} else {};
csInterface.evalScript('$._ext.evalFile("' + extensionRoot + 'b_cor_a/Finish.jsx")');
});
До сих пор все прекрасно работало. Каждый последующий скрипт запускался строго после выполнения всех действий в Photoshop предыдущим скриптом. В последней же версии Photoshop эта конструкция перестала работать. Такое впечатление, что скрипты сами по себе, а действия в Photoshop сами по себе. Если поставить задержку после каждого скрипта sleep, то подобрав время можно заставить работать все это. Но чуть где что затормозило, все идет наперекосяк. Photoshop что-то делает, но кусками из разных скриптов. Нет строгой очереди выполнения.
Понимаю, что вопрос специфичный, но, может быть, кто-то подскажет, что тут можно сделать?
Вот пример, если это что-то даст, одного из вызываемых скриптов:
//
// Finish.jsx
//
//
// Generated Tue Dec 05 2017 21:30:56 GMT+0300
//
cTID = function(s) { return app.charIDToTypeID(s); };
sTID = function(s) { return app.stringIDToTypeID(s); };
//
//==================== Finish ==============
//
function Finish() {
// Âûäåëåíèå
function step1(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putOffset(cTID('Dcmn'), 1);
desc1.putReference(cTID('null'), ref1);
desc1.putInteger(cTID('DocI'), 1298);
executeAction(sTID('select'), desc1, dialogMode);
};
// Çàêðûòü
function step2(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
desc1.putEnumerated(cTID('Svng'), cTID('YsN '), cTID('N '));
desc1.putInteger(cTID('DocI'), 1298);
desc1.putBoolean(sTID("forceNotify"), true);
executeAction(sTID('close'), desc1, dialogMode);
};
// Óäàëèòü
function step3(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putName(cTID('Chnl'), "Greyscale");
desc1.putReference(cTID('null'), ref1);
executeAction(sTID('delete'), desc1, dialogMode);
};
// Óäàëèòü
function step4(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putName(cTID('Lyr '), "Original");
desc1.putReference(cTID('null'), ref1);
var list1 = new ActionList();
list1.putInteger(47);
desc1.putList(cTID('LyrI'), list1);
executeAction(sTID('delete'), desc1, dialogMode);
};
// Çàäàòü
function step5(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putProperty(cTID('Prpr'), cTID('CchP'));
ref1.putEnumerated(cTID('capp'), cTID('Ordn'), cTID('Trgt'));
desc1.putReference(cTID('null'), ref1);
var desc2 = new ActionDescriptor();
desc2.putInteger(cTID('HsSt'), 50);
desc1.putObject(cTID('T '), cTID('CchP'), desc2);
executeAction(sTID('set'), desc1, dialogMode);
};
step1(); // Âûäåëåíèå
step2(); // Çàêðûòü
step3(); // Óäàëèòü
step4(); // Óäàëèòü
step5(); // Çàäàòü
};
//=========================================
// Finish.main
//=========================================
//
Finish.main = function () {
Finish();
};
Finish.main();
// EOF
"Finish.jsx"
// EOF