InDesign CC 2017 ExtendScript - Невозможно перезаписать текст в TextArea

На данный момент я уверен, что это что-то простое, чего мне не хватает, но я не могу понять этого.

Работа над сценарием InDesign, который принимает текст, переданный в сценарий, и записывает его в текущую выбранную текстовую область.

insertButton.onClick = function(){
    var postIndex = postList.selection.index;

    var postContent = posts[postIndex].content.rendered;

    $.writeln(app.selection[0].parentStory.contents);

    app.selection[0].parentStory.contents = postContent;

    $.writeln(app.selection[0].parentStory.contents);

    myWindow.close();
}

Я подтвердил, что функция вызывается правильно, что postContent существует и является тем, чем я ожидал, и что первый вызов Writeln выгружает текущее значение TextArea. Второй $ .writeln никогда не срабатывает, поэтому я знаю, что ошибка

app.selection[0].parentStory.contents = postContent;

Есть ли обновленный способ установки содержимого TextArea, которого я не нашел в документации?

Заранее спасибо!


person Keanan Koppenhaver    schedule 03.12.2016    source источник


Ответы (3)


Я думаю, ваша проблема в том, что ваше окно является модальным, что предотвращает любое взаимодействие с объектами inDesign. Вы должны сначала выйти из диалогового окна, чтобы изменить объекты:

var w = new Window('dialog');
var btn = w.add('button');
btn.onClick = function() {
	w.close(1);
}
if ( w.show()==1){
	//"InDesign is no longer in modal state. So you can modify objects…")
}

person Loic    schedule 05.12.2016
comment
Правильно, см. Мой ответ выше. - person Keanan Koppenhaver; 05.12.2016

... postContent существует, и я ожидаю, что это будет ...

Indesign ожидает здесь строки -> это то, чего вы ожидаете?

Что такое выбор входа? текст? textFrame?

Ты мог бы

alert(postContent.construction.name)

чтобы убедиться, что у вас есть

Ярек

person Cashmirek    schedule 03.12.2016
comment
app.selection [0] при предупреждении выдает мне [object TextFrame]. Пытаясь выяснить, что это за тип postContent, предупреждение, которое вы мне дали, ничего не предупреждает. Есть ли лучший способ увидеть ошибки во время работы скрипта? - person Keanan Koppenhaver; 03.12.2016
comment
typeof postContent возвращает строку, поэтому я этого и ожидал. - person Keanan Koppenhaver; 03.12.2016
comment
Даже вставка простой строки вроде app.selection [0] .parentStory.contents = test string; терпит неудачу. - person Keanan Koppenhaver; 03.12.2016

Когда в ExtendScript Toolkit была включена отладка, я смог найти выдаваемую ошибку:

"не может обработать запрос, потому что активен модальный диалог или предупреждение"

Это относилось к диалогу, который я открыл, когда инициировал скрипт.

Задержка вставки текста до фактического закрытия диалогового окна решила проблему.

   insertButton.onClick = function(){
        var postIndex = postList.selection.index;

        postContent = posts[postIndex].content.rendered;

        postContent = sanitizePostContent(postContent);
        // The 1 here is the result that tells our code down below that
        // the window has been closed by clicking the 'Insert' button
        myWindow.close(1);
    }

    var result = myWindow.show();

    // If the window has been closed by the insert button, insert the content
    if (result == 1) {
      app.selection[0].parentStory.contents = postContent;
    }
person Keanan Koppenhaver    schedule 03.12.2016