Ich lehne mich mal ganz weit aus dem Fenster.
JavaScript läuft in einem Single Thread. Salopp gesagt bedeutet das, dass ein JavaScript Interpreter immer genau eine Zeile Code nach der anderen abarbeitet – möglicherweise auf verschlungenen Wegen, aber immer eine nach der anderen.
Während der Bearbeitung eines Befehls kann der Interpreter auch nichts anderes machen.
Die Bedeutung von $.sleep(2000) ist daher nicht: "Ich lege mal ein paar Sekunden die Füße hoch und schau dem Rest des Systems beim Arbeiten zu", sondern "Für 2 Sekunden passiert hier gar nichts!"
Ich weiß nicht, ob das irgendwo in der Dokumentation steht, aber mein Eindruck ist, dass InDesign auch nur einen JavaScript-Interpreter am Laufen hat.
Das würde bedeuten, dass man per JavaScript (b) nicht den Ablauf eines anderen JavaScripts (a) beobachten kann. Denn b kommt ja erst zum Zuge, wenn a fertig ist.
Außerdem arbeitet im Gegensatz zur Webumgebung JavaScript in InDesign fast grundsätzlich synchron.
Das Laden einer Ressource im Web-Kontext sind letztlich zwei getrennte Scripte:
a1) Sag dem System, welche URL du willst und gib eine Weckruf-Funktion an, die aufgerufen wird, sobald das System damit fertig ist.
a2) Script a ist fertig.
b1) Weckruf-Funktion wird vom System aufgerufen
b2) b arbeitet Daten der Ressource ab.
b3) b ist fertig
Synchrones arbeiten in InDesign läuft hingegen so ab
c1) c sagt InDesign, es soll ein Dokument öffnen
c2) c wartet darauf, dass das Dokument offen ist
c3) InDesign hat das Dokument geöffnet, die Kontrolle geht wieder an c zurück und c macht weiter
Während c2 kann kein anderer JavaScript Befehl in InDesign ausgeführt werden.
Wie gesagt: Das ist mein Verständnis, das ich mir zusammengereimt habe. Ob das tatsächlich im Detail anders ist, müsste jemand nachtragen, der die Dokumentationen (SDK etc) gründlich studiert hat.
Falls ich richtig liege, ist die Konsequenz jedenfalls, dass dein Anliegen innerhalb von InDesign nicht lösbar ist.
Du müsstest die Kontrolle einem Prozess außerhalb von InDesign übergeben, der ggf. auch in der Lage ist, InDesign (oder Teile davon) abzuschießen.
Ich habe so recht keine Vorstellung, welcher Weg da gangbar wäre. Ob man z.B. in Nodejs etwas aufsetzen könnte oder ob AppleScript diese Art von Prozesssteuerung zulässt...
Kann sein, weiß ich nicht.
Das alles im Wesentlichen, um das Gespräch in Gang zu bringen :)
als Antwort auf: [#571032]