2013-02-25 32 views
6

Jedyna różnica, którą znalazłem do tej pory: Jeśli skrypt uruchamiany przez app.doScript zwraca błąd, plik i numer linii błędu są nadpisywane przez plik i numer linii połączenia app.doScript.

Czy są jakieś inne różnice, o których powinienem wiedzieć?

Oto przykładowy kod, który demonstruje powyższą różnicę:

Pierwsze uruchomienie programu InDesign:

c: 
cd "C:\Program Files\Adobe\Adobe InDesign CS6 Server x64" 
InDesignServer.com -port 12345 
pause 

Następny utworzyć plik wsadowy do uruchomienia skryptu:

c: 
cd "C:\Program Files\Adobe\Adobe InDesign CS6 Server x64" 
sampleclient -host localhost:12345 -server "C:/doscript_vs_evalfile/call_doScript.jsx" 
pause 

To „call_doScript. jsx ", który wywoła app.doScript.

try { 
    app.doScript(new File("/c/doscript_vs_evalfile/called_by_doScript.jsx")); 
    "Success"; 
} 
catch (e) { 
    var sError = "Encountered " + e.name + " #" + e.number + " at line " + e.line + " of file " + e.fileName + "\n" + e.message; 
    app.consoleout(sError); 
    sError; 
} 

To "called_by_doScript.jsx", który nazywany jest przez poprzedniego skryptu:

app.consoleout("Running called_by_doScript.jsx"); 
// Produce error 
var a = b; 

Uruchom plik wsadowy i jest to wynik:

02/25/13 13:30:03 INFO [javascript] Executing File: C:\doscript_vs_evalfile\call_doScript.jsx 
02/25/13 13:30:03 INFO [javascript] Executing File: C:\doscript_vs_evalfile\called_by_doScript.jsx 
02/25/13 13:30:03 INFO [script] Running called_by_doScript.jsx 
02/25/13 13:30:03 INFO [script] Encountered ReferenceError #2 at line 2 of file /c/doscript_vs_evalfile/call_doScript.jsx 
b is undefined 

Zauważ, że powyższy błąd jest nieprawidłowy. Błąd został spowodowany przez linię 3 wywołaną _by_doScript, a nie linię 2 call_doScript.

Teraz zmodyfikować skrypty używać $ .evalFile, a my dostać ten wynik:

02/25/13 13:32:39 INFO [javascript] Executing File: C:\doscript_vs_evalfile\call_evalFile.jsx 
02/25/13 13:32:39 INFO [script] Running called_by_evalFile.jsx 
02/25/13 13:32:39 INFO [script] Encountered ReferenceError #2 at line 3 of file /c/doscript_vs_evalfile/called_by_evalFile.jsx 
b is undefined 

Zauważ, że błąd został już zgłoszony w odpowiednim miejscu.


Edit:

znalazłem rzadki dokumentacji. To tak naprawdę nie odpowiada na moje pytanie, ale opisuje różne opcjonalne parametry.

doScript:Adobe InDesign CS6 Scripting Guide: JavaScript (direct link)
Patrz strona 16, "za pomocą metody doScript"

evalFile:Javascript Tools Guide: Adobe Creative Suite 5
Patrz strona 219

+1

Nie znam odpowiedzi, ale zaryzykowałbym to za pomocą app.doscript, można uruchamiać pliki js oraz vbs. – bgmCoder

Odpowiedz

6

$ .evalFile to funkcja podczas ExtendScript app.doScript jest implementowany przez InDesign.

$ .evalFile robi

  • utrzymać $ .stack
  • rozważyć $ .includePath
  • pracę w innych aplikacjach docelowych

app.doScript może

  • argumenty karnetów
  • zmienić język, na przykład AppleScript
  • użycie #targetengine reagować na inne sesje
  • zmienić tryb cofania/transakcji miarę obsługiwane

Ale ...

  • zagnieżdżone doScript wymaga zastępowania argumentów
  • w sposób skomplikowana konfiguracja Miałem problem z debugowaniem po przekazaniu więcej niż 12 argumentów.
  • pojedyncze stepping całej doScript kłopoty

Ponadto, jak stwierdzono, obsługi błędów różni. Miej oko na wyjątki ...