Да ну? Где?В документации пишут что через ExtendScript можно подгружать библиотеки на С/С++
дропбокс -> /s/81zyveirp5ufsqt/javascript_tools_guide.pdfДа ну? Где?
@Oleh Melnyk,
1. У меня CS6, поэтому волшебство с NodeJS идет мимо меня.
2. Из форумов понял, что нет, не получится получить ответ на запрос HTTPS.
3. Библиотеки, конечно, прекрасно, но насколько я понял из документации, сначала такую библиотеку нужно сделать и расточить ее под ExternalObject.
var doc = app.activeDocument;
function loadUrl(url, callback) {
var bt = new BridgeTalk();
bt.target = 'bridge' ;
var s = '';
s += "if ( !ExternalObject.webaccesslib ) {\n";
s += " ExternalObject.webaccesslib = new ExternalObject('lib:webaccesslib');\n";
s += "}\n";
s += "var html = '';\n";
s += "var http = new HttpConnection('" + url + "') ; \n";
s += "http.response = html;\n";
s += "http.execute() ;\n";
s += "http.response;\n";
bt.body = s;
bt.onResult = function( inBT ) {
callback( null, inBT.body );
};
bt.onError = function( inBT ) { callback( 1, null ); };
bt.send( 50 );
}
function done( err, data ) {
if ( err ) {
$.writeln( 'FAILED' );
} else {
$.writeln( data );
}
}
loadUrl( 'https://yandex.ru', done );
И? Из CS6 как к Node обратиться?
Вот код, который из InDesign обратиться к bridge, загрузит библиотеку и получит страницу Яндекс. Только конявый Bridge запустится.
#target bridge
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject('lib:webaccesslib');
}
var http = new HttpConnection("https://google.com.ua");
http.execute();
var result = http.response;
var f = File("~/Desktop/google.txt");
f.open("w", "utf-8");
f.write(result);
f.close();
f.execute();
Ну и на кой же мне запуск Bridge, если задача в том, чтобы скачать ряд файлов (точнее сравнить их с файлами у пользователя и обновить или добавить новые, убрать ненужные)?
И это нужно сделать максимально незаметно для пользователя, потому что у него не об этом голова болеть должна. А тут запускает индез и понеслось всякое...
Мы сейчас говорим о двух альтернативные методах:Ну точно — скрипт же будет весить всего мегов 100, чо такова Целесообразность.
Да, есть такая засадаПопробовал скопировать dll-ку в папку со скриптом — ошибка.
Попробовал скопировать dll-ку в папку с индезом — ошибка.
#target indesign
BridgeTalk.prototype.sendSynch = function(timeout) {
var self = this;
self.onResult = function(res) {
this.result = res.body;
this.complete = true;
}
self.complete = false;
self.send();
if (timeout) {
for (var i = 0; i < timeout; i++) {
BridgeTalk.pump(); // process any outstanding messages
if (!self.complete) {
$.sleep(1000);
} else {
break;
}
}
}
var res = self.result;
self.result = self.complete = self.onResult = undefined;
return res;
}
// for typos, provide an alias
BridgeTalk.prototype.sendSync = BridgeTalk.prototype.sendSynch;
function loadUrl(url, timeout) {
var bt = new BridgeTalk();
bt.target = 'bridge';
var httpTimeout = timeout;
var script = '';
script += "if ( !ExternalObject.webaccesslib )\n";
script += " ExternalObject.webaccesslib = new ExternalObject('lib:webaccesslib');\n";
script += "var response = null;\n";
script += "var retry = true;\n";
script += "while (retry) {\n";
script += " var http = new HttpConnection('" + url + "') ; \n";
script += " http.timeout = " + httpTimeout + ";\n";
script += " http.execute() ;\n";
script += " try{\n";
script += " response = http.response;\n";
script += " retry = false;\n";
script += " } catch (e){\n";
script += " BridgeTalk.bringToFront('indesign');\n";
script += " if (!confirm('There was an error communicating with the server. Would you like to retry?'))\n";
script += " retry = false;\n";
script += " }\n";
script += "}\n";
script += "response;\n";
bt.body = script;
return bt.sendSynch(timeout);
}
var result = loadUrl("https://ya.ru", 50);
// вставляем ответ - html страничку в выделений текстовой фрейм
app.selection[0].contents = result;
Насколько я понимаю, из ES нативную библиотеку невозможно вызвать по определению. Максимум, , что можно сделать - откомпилировать платформеннозависимый исполняемый модуль и вызвать его из индизайна через execute
Почему же нельзя - выше примеры которые это делают!Насколько я понимаю, из ES нативную библиотеку невозможно вызвать по определению. Максимум, , что можно сделать - откомпилировать платформеннозависимый исполняемый модуль и вызвать его из индизайна через execute