2016-12-03 5 views
0

An dieser Stelle bin ich sicher, dass dies etwas Einfaches ist, dass ich vermisse, aber ich kann es nicht für das Leben von mir herausfinden.InDesign CC 2017 ExtendScript - Text in TextArea kann nicht überschrieben werden

Mit einem InDesign-Skript arbeiten, das Text an das Skript übergeben und in den aktuell ausgewählten Textbereich schreibt.

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(); 
} 

Ich habe bestätigt, dass die Funktion korrekt aufgerufen wird immer, dass postContent existiert und was ich erwarte, dass es den aktuellen Wert des TextArea- zu sein, und dass die erste writeln Anruf-Dumps aus. Der zweite $ .writeln nie ausgelöst, so dass ich weiß, dass der Fehler auf

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

Gibt es eine aktualisierte Weg TextArea- Inhalte einstellen, dass ich nicht in der Dokumentation gefunden?

Vielen Dank im Voraus!

Antwort

0

haben Wann wurde in ExtendScript Toolkit Fehlervermeidung, ich war in der Lage, den Fehler zu finden geworfen:

"kann die Anfrage nicht verarbeiten, da ein modales Dialogfeld oder eine Warnung aktiv ist"

Dies bezog sich auf den Dialog, den ich beim Starten des Skripts geöffnet habe.

Die Verzögerung der Texteinfügung, bis der Dialog tatsächlich geschlossen wurde, behebt das Problem.

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; 
    } 
+0

So ist es mit Erfolg gemacht? – Cashmirek

0

... postContent existiert und was ich erwarten, dass es sein ...

Indesign erwartet einen String hier -> ist es, was man auch erwarten?

Was ist eine Eingangsauswahl? Text? TextFrame?

Sie könnten

alert(postContent.construction.name) 

, um sicherzustellen, was Sie

Jarek

+0

app.selection [0], wenn alarmiert, gibt mir [object Textframe] Der Versuch, herauszufinden, was die Art von postContent ist, der Alarm, den Sie mir gegeben haben, warnt nichts. Gibt es eine bessere Möglichkeit, Fehler zu sehen, wenn das Skript ausgeführt wird? –

+0

typeof postContent gibt String zurück, also das ist, was ich erwarten würde. –

+0

Auch Einfügen einer einfachen Zeichenfolge wie app.selection [0]. ParentStory.contents = "test string"; schlägt fehl. –

1

Ich denke, Ihr Problem ist, dass Ihr Fenster modal ist und somit jede Interaktion mit InDesign-Objekten verhindert. Sie müssen den Dialog beenden zuerst, um Objekte zu ändern:

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

+0

Richtig, siehe meine Antwort oben. –

Verwandte Themen