Проблема при отработке onClick в скрипте для Иллюстратора

Статус
Закрыто для дальнейших ответов.

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Есть такой джаваскрипт.

var dlg = new Window ('palette', 'TEST');
var ActDoc = null;
if (app.documents.length > 0) {ActDoc = app.activeDocument;}
alert(ActDoc);
dlg.msgPnl = dlg.add('panel', undefined, 'Test');
dlg.msgPnl.Btn = dlg.msgPnl.add('button',undefined,'Test');


dlg.msgPnl.Btn.onClick = function(){
alert('Doc: '+app.documents.length,'Test');
alert(ActDoc);
}

dlg.show();

В Иллюстраторе открыт документ. При выполение его первый алерт выдает информацию о документе. После нажатие кнопки Test в функции onClick выдается кол-во документов - 1, второй выдает - что докумет пустой. Почему?

При измение palette на dialog все нормально.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 294
Реакции
10 865
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

А что говорит alert(app.activeDocument) вместо alert(ActDoc)?
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 033
Реакции
1 200
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

Я использовал бы BridgeTalk:
Код:
#targetengine illustrator

  if (app.documents.length > 0) {alert(app.activeDocument);}
 
 dlg = new Window ('palette', 'TEST');
 dlg.msgPnl = dlg.add('panel', undefined, 'Test');
 dlg.msgPnl.Btn = dlg.msgPnl.add('button',undefined,'Test');
 dlg.show();

 dlg.msgPnl.Btn.onClick = function()
 {
   var bt = new BridgeTalk();
   bt.target = "illustrator";
   bt.body = "{\n"+
  "alert('Doc: '+app.documents.length,'Test');\n"+
  "ActDoc = app.activeDocument;\n"+
  "alert(ActDoc);\n"+
  "}\n";
   bt.send();    
}



 

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

alert(app.activeDocument) выдает undefined
 

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

Используя BridgeTalk получилось. Спасибо
Теперь пойдем дальше
 

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

В продолжении темы
Есть скрипт

#targetengine illustrator
if (app.documents.length > 0) {alert(app.activeDocument);}
dlg = new Window ('palette', 'TEST');
dlg.msgPnl = dlg.add('panel', undefined, 'Test');
dlg.msgPnl.Btn = dlg.msgPnl.add('button',undefined,'Test');
dlg.show();


dlg.msgPnl.Btn.onClick = function()
{
var bt = new BridgeTalk();
bt.target = "illustrator";
bt.body = "{\n"+
"alert('Doc: '+app.documents.length,'Test');\n"+
"alert(dlg.msgPnl);\n"+
"f1(dlg.msgPnl);\n"+
"}\n";
bt.send();
}


function f1(panel){
alert ("1");
}

При выполнение этого скрипта из EST - все отрабатывает нормально. ТОлько надо поставить две косые в начале в строке #targetengine illustrator

Если выполнение скрипта из илюстратора - не выпоняются строки помеченные красным цветам.
P.S. - Не выпонять после выполнения скрипта из EST. Я перегружал иллюстратор.
Вопрос: Как добиться чтобы эти строки выполнялись и выдавали правильную информацию.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

то не комментить #targetengine illustrator

а что вы им вообще задаете? если имеется в виду выполнение в ill, то используется директива
#target illustrator

#targetengine указывает имя сессии (для панели - разумно), и я его, кстати, всегда пишу в кавычках (если для #target они optional, то для #targetengine в мануале об этом ни слова)

#target name
Defines the target application for this JSX file. The name value is an application specifier; see Application and namespace specifiers. Enclosing quotes are optional.
If the Toolkit is registered as the handler for files with the .jsx extension (as it is by default), opening the file opens the target application to run the script. If this directive is not present, the Toolkit loads and displays the script. A user can open a file by double-clicking it in a file browser, and a script can open a file using a File object’s execute method.

#targetengine
enginename
Defines the target JavaScript engine for this JSX file, within the designated target application.
Supported by Adobe Illustrator CS5 and Adobe InDesign CS5; other applications ignore the directive.
For Adobe Illustrator CS5 and Adobe InDesign CS5, if the named engine does not exist, and if the script originates within the application (rather than being executed in the ExtendScript Toolkit or received in an interapplication message), the application creates a new JavaScript engine with this name, which persists for the lifetime of the application session.
If the script originates outside the application, and the named engine does not exist, the directive is ignored.
 

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

Я не комментирую #targetengine illustrator при вызове из илюстратора
 

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

Я может не правильно задал вопрос. Я хочу получить правильную информацию о созданном окне dlg в скрипте, сформированном в BridgeTalk (отмечено красным цветом). На данном этапе получаю правильную информацию только о документе ила.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

а что вы этим #targetengine задаете? попробуйте написать

#target illustrator
#targetengine "mysession"
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

а, ну скрипт запущенный из bt же не знает, что такое dlg, в нем то оно не определено
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 033
Реакции
1 200
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

а что вы им вообще задаете?
Вы попробуйте в коде в самом начале поста написать #target illustrator вместо #targetengine illustrator и запустите скрипт в люстре. Появится панелька? Вот поэтому и.

Я не комментирую #targetengine illustrator при вызове из илюстратора
И? Люстра CS6 - ваш код, что выше написан, копи-паст в файл трытыты.js, запускаю его - все алерты выводятся.

ЗЫ. гы. пока писал вы уже понаотвечали.



 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

Вы попробуйте в коде в самом начале поста написать и #target illustrator вместо #targetengine illustrator и запустите скрипт в люстре. Появится панелька? Вот поэтому и.

я вообще
#target illustrator
#targetengine "session"
предлагал

но вроде действительно кавычки не обязательны и тут

в любом случае, у меня вот такую ошибку пишет из ExtendScript
Cannot execute script in target engine 'illustrator'!
(#57) Engine 'illustrator' does not exists!

напрямую срабатывает

но зачем bridgeTalk, может кто-нибудь объяснить?
у меня и такая версия работает
Код:
#target illustrator
#targetengine "mysession"
if (app.documents.length > 0) {alert(app.activeDocument);}
dlg = new Window ('palette', 'TEST');
dlg.msgPnl = dlg.add('panel', undefined, 'Test');
dlg.msgPnl.Btn = dlg.msgPnl.add('button',undefined,'Test');
dlg.show();


dlg.msgPnl.Btn.onClick = function()
{
alert('Doc: '+app.documents.length,'Test');
alert(dlg.msgPnl);
f1(dlg.msgPnl);
}


function f1(panel){
alert ("1"); 
}
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 033
Реакции
1 200
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

Запускаю просто вышеуказанный код как есть без изменений. Работает неправильно, ну, дак это уже объяснили в посте №12, но никаких ошибок не выдает. Я не вдавался в суть этих targetengine, мне нужно было в своё время (ill CS3), чтобы работала панелька. Без этой строчки, запуская из-под иллюстратора скрипт, панелька не работала.


Не по теме:
ЗЫ. Извиняюсь, убегаю.




 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

ну вот суть в том что #targetengine задает имя сессии. для панели да, он нужен, просто это не замена #target

расскажите теперь, зачем bridgeTalk?

upd: а и в самом деле, если напрямую - app.activeDocument внутри onClick undefined будет. при этом app.documents[0] документ возвращает
так что реально bridgeTalk нужен, получается
 

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

При отработке onClick информацию об dlg присутствует, но app.activeDocument - undefined (как сказано выше). Но чтобы был доступен app.activeDocument я используя bridgeTalk. Но тогда информация об dlg пропадает. Как сделать так чтобы была доступна информация о dlg и activeDocument. Может есть другие пути вместо bridgeTalk
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

в принципе, можно было бы задать глобальную переменную в самом начала var myDoc=app.activeDocument;

но, насколько я понимаю, смысл в том, чтобы переключаться между документами, поэтому такой вариант не катит

у меня вот такая идея - давайте использовать bridgetalk только для получения activeDocument, а все остальное - напрямую. сейчас накидаю и проверю
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

нет, не получается. в app.documents внутри onClick панели все содержимое - это пустые объекты
Код:
({})
:(
 

sheingart

Участник
Топикстартер
Сообщения
9
Реакции
0
Ответ: Проблема при отработке onClick в скрипте для Иллюстратора

Скрипт из bridgetalk может видеть данные окна вызывающего скрипта.?
 
Статус
Закрыто для дальнейших ответов.